如何向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上一样为会话添加值,有可能吗?
当存在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);
问候