在WCF服务中管理和保留每个连接用户详细信息

问题描述 投票:0回答:1

我有一个winform应用程序和一个wcf服务。我的意图是,当我的winform应用程序向wcf服务发送请求消息时,该服务必须存储客户端请求的详细信息,并且在某个时间之后,wcf将返回对winform [client]应用程序的回调。

假设将有10个这样的客户端向该wcf服务发送请求,并且在5分钟之后,该服务将通过发送“hi”消息向每个客户端发送回叫消息。

我的服务实现是这样的。

  [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = 
       typeof(IServiceCallBacks))]
public interface IService
   {
          [OperationContract]
          void Connect(User user);
   }

我的回叫方法如下所示

  public interface IServiceCallBacks
    {

    [OperationContract(IsOneWay = true)]
    void ContactsUpdated(List<Contact> updatedContacts);
    } 

这是实施

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IService
{
    List<User> users = new List<User>();

    public Service()
    {

    }

    public void Connect(User user)
    {
        users.Add(user);
    }

这是正确的方法吗?我如何从服务向每个客户发送通知?

c# wcf
1个回答
0
投票

回叫合同的问题是连接需要打开。 “5分钟”的回调可能会失败,因为根据传输类型,连接可能由于不活动而先关闭。

如果遇到问题,您可能要考虑根本不使用WCF“回调”,只需将“客户端”视为另一个服务,并让“服务器”打开与“客户端”的连接并调用它。这将解决任何此类不活动问题。唯一的问题是防火墙问题,因此您可能需要注意WCF传输选择和防火墙端口。

© www.soinside.com 2019 - 2024. All rights reserved.