我正在努力在RoutingService
上设置OperationTimeout问题是邮件转发到的服务需要超过1分钟才能给出响应。这会导致RoutingService上的OperationTimeout异常。
我尝试在RoutingService的客户端代理上设置OperationTimeout但没有成功。
我所做的是添加Endpoint Behavior并在ApplyClientBehavior方法中添加自定义IClientMessageInspector。
在自定义ClientMessageInspector中,我设置了OperationTimeout,就像您在此代码段中看到的那样。
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var contextChannel = channel as IContextChannel;
contextChannel.OperationTimeout = new TimeSpan(0, 10, 0);
return request;
}
对我来说,似乎我现在已经太迟了,因此RoutingService生成的代理不关心这个设置,这可能是吗?
有什么建议吗?
答案 0 :(得分:1)
在web.config中设置SendTimeout,如下所示
<binding name="myBindingName" sendTimeout="00:10:00"
closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
crossDomainScriptAccessEnabled="true" />
答案 1 :(得分:1)
我找到了解决方法。
您只需要在路由器的客户端端点的绑定上设置SendTimeout。创建代理时,路由器将在其通道上设置OperationTimeout = SendTimeout。
// add the endpoint the router uses to receive messages
serviceHost.AddServiceEndpoint(
typeof(IRequestReplyRouter),
new BasicHttpBinding(),
"http://localhost:8000/routingservice/router");
// create the client endpoint the router routes messages to
var client = new ServiceEndpoint(
ContractDescription.GetContract(typeof(IRequestReplyRouter)),
new NetTcpBinding(),
new EndpointAddress("net.tcp://localhost:8008/MyBackendService.svc"));
// Set SendTimeout, this will be used from the router generated proxy as OperationTimeout
client.Binding.SendTimeout = new TimeSpan(0, 10, 0);