如何向WCF会话添加值,并在客户端(WinForm)和WCF上下文中使用它

本文关键字:WCF WinForm 上下文 会话 添加 客户端 | 更新日期: 2023-09-27 18:21:24

我有一个WinForm客户端连接到WCF的应用程序。我使用会话,在登录时启动会话,在注销时终止会话。

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IOperazioniUtente
{
    [OperationContract(IsInitiating = true, IsOneWay = false)]        
    Utente login(Utente utenteInConnessione);
    ...........
    ...........
    [OperationContract(IsInitiating = false, IsTerminating = true, IsOneWay = true)]    
    void logout(Utente ute);

}

我想像在ASP.NET上一样为会话添加值,有可能吗?

如何向WCF会话添加值,并在客户端(WinForm)和WCF上下文中使用它

当存在PerSession实例时,每个客户端代理都有一个服务器实例。

因此,要向会话中添加对象,只需向服务器实例、集合或最适合您管理的任何类型的字段或属性中添加对象即可。

例如:

1.服务接口

与问题完全相同

[ServiceContract(SessionMode=SessionMode.Required)]
public interface IMessageService
{
    [OperationContract(IsOneWay = true)]
    void AddMessageToSession(String msg);
    [OperationContract]
    List<String> ListSessionMessages();
}

2.服务实施

public class MessageService : IMessageService
{
    private List<String> messages = new List<String> ();
    public void AddMessageToSession(string msg)
    {
        messages.Add(msg);
    }
    public List<string> ListSessionMessages()
    {
        return messages;
    }
}

3.客户端呼叫

每个客户端一个会话==每个调用方一个服务实例

MessageServiceClient client1 = new MessageServiceClient();
MessageServiceClient client2 = new MessageServiceClient();
// ...
for (int i = 0; i < 5; i++)
    client1.AddMessageToSession("msg" + i);
client2.AddMessageToSession("msg" );
int nbMessages1 = client1.ListSessionMessages().Count();
int nbMessages2 = client2.ListSessionMessages().Count();
// outputs 5 :
Console.WriteLine("Number of messages in Session 1 : " + nbMessages1);
// outputs 1 :
Console.WriteLine("Number of messages in Session 2 : " + nbMessages2);

问候