我正在使用 net.tcp 和 netTcpBinding 将 WCF 服务放在一起,以便与我的 Silverlight 客户端进行双工通信。我从 Silverlight 应用程序调用该服务,该服务调用另一个服务器,将 WCF 服务类中的回调方法传递给它。远程服务器多次回调,每次回调时,WCF 服务都会使用回调通道将数据发送到 Silverlight 客户端。大多数时候这一切都很好。
如果用户提出一个大请求,我会在大量回调已经工作后得到一个 TimeoutException。(显然,在其他地方还有一些工作可以防止这种情况发生,但我想首先加强服务。)
在尝试回调 Silverlight 客户端之前,我希望进行某种“if (client.ConnectionState == faulted)”检查,但我似乎找不到保持连接状态的对象。有吗?我是不是从错误的角度来处理这个问题?
这是我第一次尝试服务 net.tcp 和双工。我刚搬家,我的 WCF 圣经还在一个盒子里。某处。:-) 所以,我不能做我通常的背景阅读。
任何指点将不胜感激。这是一些裸代码,以防我的描述太糊涂:
private IActiveDirectoryClient client;
private AsyncSearchRunner runner;
public void Search(Request request)
{
this.client = OperationContext.Current.GetCallbackChannel<IActiveDirectoryClient>();
runner = new AsyncSearchRunner();
runner.Run(request.SearchRoot, request.SearchFilter, request.PageSize,
System.DirectoryServices.Protocols.SearchScope.Subtree, SendObjects);
}
private void SendObjects(List<DirectoryObject> items)
{
Response response = new Response();
response.DirectoryObjects = items.ToArray();
client.SendResponse(response);
}