我应该在哪里增加ReceiveTimeout?

时间:2011-07-13 23:20:43

标签: silverlight wcf

我在Silverlight客户端和WCF C#服务器之间有双工TCP连接。服务器不断将更新推送到客户端。但是,在大约十分钟的用户不活动之后,任何发送到服务器的用户操作都会导致异常,尽管更新会继续成功。

考虑到所涉及的时间段和客户端的不活动,我猜它涉及ReceiveTimeout设置。但是,当我尝试在客户端上设置它时(见下文),它并没有解决这个问题。

        CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(),
            new TcpTransportBindingElement());
        binding.ReceiveTimeout = TimeSpan.MaxValue;
        EndpointAddress address = new EndpointAddress(testAddress);

        testClient = new TestClient(binding, address);

我是否需要在服务器端设置此设置,或者代替客户端?

如果我确实需要在服务器上设置它,我将如何执行此操作,因为我正在使用OperationContext.Current.GetCallbackChannel<ITestClient>()来获取回调接口?

回调接口不允许我访问属性以设置超时,我不知道将其强制转换为启用此功能。我尝试在服务器端的ServiceHost上设置它,但这似乎也没有解决它。

3 个答案:

答案 0 :(得分:1)

我会在客户端和服务器上配置扩展的OpenTimeout,ReceiveTimeout和SendTimeout。

答案 1 :(得分:0)

我认为你应该双方都这样做。

您可以尝试获取服务端使用的绑定(通过ServiceHost.Description)并设置其ReceiveTimeout。

我不明白为什么你不直接使用netTcpBinding并使用web.config或app.config?

答案 2 :(得分:0)

原来答案是:没关系。在客户端设置它在技术上是正确的,但根据Configuring Web Service Usage in Silverlight Clients

  

警告:未遵循此receiveTimeout的值   Silverlight 4并设置它不会影响行为   应用

我已经对此进行了测试并验证了情况。

答案最终是每四分钟执行一次对服务器的保持呼叫(选择四分钟,因为它是十分钟接收超时的一半,减去一个缓冲区)。