我有一个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);
}
这是正确的方法吗?我如何从服务向每个客户发送通知?
回叫合同的问题是连接需要打开。 “5分钟”的回调可能会失败,因为根据传输类型,连接可能由于不活动而先关闭。
如果遇到问题,您可能要考虑根本不使用WCF“回调”,只需将“客户端”视为另一个服务,并让“服务器”打开与“客户端”的连接并调用它。这将解决任何此类不活动问题。唯一的问题是防火墙问题,因此您可能需要注意WCF传输选择和防火墙端口。