跨多个WCF调用存储登录信息的最佳实践

跨多个WCF调用存储登录信息的最佳实践,wcf,session,Wcf,Session,我正在寻找存储WCF登录过程中获得的信息的最佳实践,并使其可用于任何后续服务调用(属于同一会话) 基本上,我编写了自己的登录提供商: public class CustomAuthenticator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (username == "test" && pa

我正在寻找存储WCF登录过程中获得的信息的最佳实践,并使其可用于任何后续服务调用(属于同一会话)

基本上,我编写了自己的登录提供商:

public class CustomAuthenticator : UserNamePasswordValidator
  {
    public override void Validate(string userName, string password)
    {
        if (username == "test" && password == "test")
        {
          int id_I_want_to_use = getUserID(username);
        }
    }
  }
我有一个服务,以后需要使用ID

public void someService(int itemID)
{
    getSomeInfo(id_I_want_to_use, itemID);
}
我遇到的问题是,我还没有找到任何关于如何正确存储的好信息。我查看了instanceContext,但我希望在服务器端完成所有这些工作。我看到了一些关于使用asp遗留支持使用HTTP会话存储数据的信息,但这并不是我真正想要的。我正在尝试使用当前的技术保留所有内容,如果可以的话,我不想被绑定到http绑定上


我可能完全错误地处理了这个问题,但这正是我提出这个问题的基本原因。

实现这一点的方法是使用实例上下文,您只需将合同标记为每个会话

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
 class MyService : IMyContract {...}
这都是服务器端的。在客户机上,您需要做的唯一一件事就是保持代理打开,以便保持会话活动


有关更多详细信息,请参见:

执行此操作的方法是使用实例上下文,您只需将合同标记为每个会话

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
 class MyService : IMyContract {...}
这都是服务器端的。在客户机上,您需要做的唯一一件事就是保持代理打开,以便保持会话活动


有关更多详细信息,请参阅:

我想我有点困惑。但是,如何在登录中存储获得的用户ID?基本上,我需要一种方法将用户id(和一些其他字段)传递到会话实例,并使其可用于会话中的每个服务,但这些信息是由我的自定义登录/验证函数确定的。我想我很困惑。但是,如何在登录中存储获得的用户ID?基本上,我需要一种方法将用户id(和一些其他字段)传递到会话实例,并使其可用于会话中的每个服务,但该信息由我的自定义登录/验证函数确定。