我在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上设置它,但这似乎也没有解决它。
答案 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并设置它不会影响行为 应用
我已经对此进行了测试并验证了情况。
答案最终是每四分钟执行一次对服务器的保持呼叫(选择四分钟,因为它是十分钟接收超时的一半,减去一个缓冲区)。