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

时间:2015-11-09 16:33:43

标签: c# winforms wcf session

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

[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上为会话增加价值,它可能吗?

1 个答案:

答案 0 :(得分:3)

当存在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);

此致