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

时间:2011-09-01 17:46:10

标签: wcf session

我正在寻找存储在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绑定。

我可能完全错误地接近这个,但这基本上就是我要问的原因。

1 个答案:

答案 0 :(得分:1)

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

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
 class MyService : IMyContract {...}

这是所有服务器端。您需要在客户端上执行的唯一操作是保持代理处于打开状态,以使会话保持活动状态。

有关详细信息,请参阅:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx