Session
in有问题Service
,Session
正在null
第二次通话(已解决,请参阅帖子底部)。
JsonServiceClient
我有自托管服务器和客户端,它们通过和调用服务器ProtoBufServiceClient
。
在启动客户端应用程序时,我调用:
var baseUrl = ConfigGlobal.Host ;
var client = new JsonServiceClient(baseUrl);
var authResponse = client.Post<AuthResponse>("/auth", new Auth
{
UserName = "test1",
Password = "password",
RememberMe = true
});
它有效 -OnAuthenticated
它在我的CustomUserSession : AuthUserSession
.
authService.SaveSession(session);
没有帮助。
然后在一节课上:
var client = new ProtoBufServiceClient(ConfigGlobal.Host);
client.Put(new ExcelInitialize {Filename = ""}); // OK
Model = client.Get(...); // Session is null
Get
方法 Session is中的服务类存在问题null
。如果我实施
public CustomUserSession CustomUserSession
{
get
{
return SessionAs<CustomUserSession>();
}
}
我会得到:仅支持通过单例访问的 ASP.NET 请求。
我的 AppHost.cs
container.Register<ICacheClient>(new MemoryCacheClient());
container.Register<ISessionFactory>(c => new SessionFactory(c.Resolve<ICacheClient>()));
Plugins.Add(new AuthFeature(
() => new CustomUserSession(), new IAuthProvider[]
{
new CustomCredentialsAuthProvider(),
new BasicAuthProvider(),
}));
Plugins.Add(new RegistrationFeature());
目标:
从客户端发送一些变量并在主机上记住它们,直到用户注销。
编辑:
我的工作流程如下所示:
某类1:
- 新的身份验证服务客户端->Post(new Auth(...)); // 登录正常
- 而已
某类2:
- 新服务客户端->Put(new E); // 一些初始化。
- 服务客户端->Get(new G);
服务 G:
- 在 G 请求新服务客户端 TryResolve();
- 客户端->获取(新 W)
服务 E
- 在 E 请求 CustomUserSession 可访问
- 在 W 请求 CustomUserSession 时无法访问。
我的 Custom* 课程看起来像 Scott 的回答。
编辑:
这是我准备复制和粘贴的问题的代码:
private static void Main(string[] args)
{
// Very basic console host
var appHost = new AppHost();
appHost.Init();
appHost.Start("http://*:8082/");
var url = "http://localhost:8082";
var foo = new TestApp.SomeClass1(url);
var bar = new TestApp.SomeClass2(url);
Console.ReadKey();
}
public class AppService : Service
{
public CustomUserSession CustomUserSession
{
get
{
// Returns the typed session
return SessionAs<CustomUserSession>();
}
}
}
public class GService : AppService
{
public object Get(GRequest request)
{
var client = base.TryResolve<EService>();
client.Get(new WRequest());
return new { CustomUserSession.SuperHeroIdentity };
}
}
public class EService : AppService
{
public void Get(WRequest wRequest)
{
Console.WriteLine(CustomUserSession.SuperHeroIdentity);
}
public void Get(ERequest request)
{
Console.WriteLine(CustomUserSession.SuperHeroIdentity);
}
public void Put(ERequest request)
{
Console.WriteLine(CustomUserSession.SuperHeroIdentity);
}
}
public class SomeClass1
{
public SomeClass1(string url)
{
var client = new JsonServiceClient(url);
client.Post<AuthResponse>("/auth", new Auth
{
UserName = "clark.kent",
Password = "kryptonite",
RememberMe = true
});
}
}
public class SomeClass2
{
public SomeClass2(string url)
{
var client = new JsonServiceClient(url);
client.Put(new ERequest());
client.Get(new GRequest());
}
}
public class GRequest : IReturnVoid
{
}
public class ERequest : IReturnVoid
{
}
public class WRequest : IReturnVoid
{
}
解决方案(针对此问题):
- 在客户端应用程序中保存会话 cookie,并在每次调用 Web 服务之前恢复它们。
- 使用 Service::Resolve() 代替 Service::TryResolve