0

我正在使用 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);
    }
4

1 回答 1

0

是的,State在类中定义了一个属性ClientBase<>(所有代理类都派生自ClientBase<>)。

有一些代理包装器可以处理连接的故障状态并根据需要重新建立连接。谷歌“wcf 代理包装器”。

如果您使用某种 ServiceLocator 模式,您也可以自制一些东西。

于 2011-04-29T13:49:13.547 回答