我有一个带有连接到 WCF 的 WinForm 客户端的应用程序。我使用 session ,在登录时启动 session ,在注销时终止 session 。
[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 上一样向 session 添加值,这可能吗?
当有一个 PerSession 实例时,每个客户端代理都有一个服务器实例。
因此,要将对象添加到 session 中,只需将对象添加到服务器实例、集合或最适合您管理的任何类型的字段或属性中。
例如:
<强>1。服务接口(interface)
和题中的一样
[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。客户来电
每个客户端一个 session == 每个调用者 1 个服务实例
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);
问候
我是一名优秀的程序员,十分优秀!