我有一个分发的应用程序,WinForm客户端连接到WCF服务。 目前我不使用会话。 我想要使用会话,因为应用程序有登录,操作和注销。
在WCF方面,我有这个代码
[ServiceContract]
public interface IOperationsUser
{
[OperationContract]
User login(User loginUsers);
*****
}
在客户端我使用这种方式
private OperationsUser WCF_OPERATIONS_USER = new OperationsUser ();
所以调用方法
User userLogin = WCF_OPERATIONS_USER.login(myUser)
如何为每个用户使用会话?
答案 0 :(得分:1)
1)使用InstanceContextMode=InstanceContextMode.PerSession
创建服务,这样可以保证您拥有相同的服务实例来提供后续请求。
2)启动新会话使用标有OperationContract(IsInitiating = True)
3)在一个会话中,将使用一个相同的服务实例,因此您可以在此服务中拥有一个州。
4)关闭标有OperationContract(IsTerminating = True)
对于 IsInitiating 和 IsTerminating 方法,您还可以添加IsOneWay=true
[ServiceContract(SessionMode = SessionMode.Allowed)]
public interface Iservice
{
// you do not need really to return anything
[OperationContract(IsInitiating = True, IsOneWay=true)]
void Login(UserData user)
[OperationContract(IsInitiating = false)]
double ProcessData(double n1, double n2)
// your implementation can do some finalization or even can be empty.
// the call will simply drop the session
[OperationContract(IsInitiating = False, IsTerminating =True, IsOneWay=True)]
void Logout()
}