2011-09-01 53 views
1

我正在寻找最好的做法,用于存储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

做到这一点的方法是使用实​​例而言,你只是标记您的合同,每个会话

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

这是所有服务器端。您需要在客户端上做的唯一事情是保持代理处于打开状态,以保持会话的活跃。

欲了解更多详情,请参阅:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

+0

我想我很困惑。我将如何存储我在登录中获得的用户ID?基本上,我需要一种方法来传递用户ID(和一些其他领域),以会议的实例,并有可供会话中的每个服务,但这些信息是由我的自定义登录/验证功能确定。 – Zipper