为什么忽略 WCF 客户端超时
Why is the WCF Client timeout ignored
我有一个 WCF 客户端,其中编写了以下代码:
MyClient myClient = new MyClient();
string id = Guid.NewGuid();
string result = myClient.Foo(id);
Console.WriteLine(result);
这样可以,但是我想为服务调用添加一个时间限制,这样如果操作时间过长就会抛出异常。我尝试在绑定元素的配置文件中添加超时,如下所示:
<basicHttpBinding>
<binding
receiveTimeout="00:00:05"
sendTimeout="00:00:05"
</binding>
</basicHttpBinding>
悲哀的是这个好像不行
我也试过像这样在代码文件中手动设置它:
MyClient myClient = new MyClient();
myClient.Endpoint.Binding = new BasicHttpBinding()
{
SendTimeout = new TimeSpan(0, 0, 5),
ReceiveTimeout = new TimeSpan(0, 0, 5)
};
string id = Guid.NewGuid();
string result = myClient.Foo(id);
Console.WriteLine(result);
但同样,它似乎不起作用。
我用一个非常慢的服务测试了它,20 分钟后它终于返回了(正确的)答案,但没有抛出超时异常。
我尝试访问的 WCF 服务是否可能以某种方式阻止超时?
我以前去过这个兔子洞。我想 OperationTimeout
可能就是您要找的。
(myClient as IClientChannel).OperationTimeout = TimeSpan.FromSeconds(5);
差不多一年后回答我自己的问题。
我最初没有解决这个错误,因为它过去很少发生。它最近重新浮出水面,所以我不得不再次深入研究它。
据我所知,没有抛出 TimeoutException,仅仅是因为 SOAP 请求成功完成。只有从请求发出到响应 returns 的那一刻,超时才会被接受。我验证了使用提琴手。但是我的代码仍然挂了好几个小时。
看来阻止我的代码的部分只是对 SOAP 响应的解析。默认 WCF 解析器在尝试将特定响应解析为 XElement 时只是永远挂起。
我正在尝试使用不同的自定义解析器,我会在完成后 post 结果。
我有一个 WCF 客户端,其中编写了以下代码:
MyClient myClient = new MyClient();
string id = Guid.NewGuid();
string result = myClient.Foo(id);
Console.WriteLine(result);
这样可以,但是我想为服务调用添加一个时间限制,这样如果操作时间过长就会抛出异常。我尝试在绑定元素的配置文件中添加超时,如下所示:
<basicHttpBinding>
<binding
receiveTimeout="00:00:05"
sendTimeout="00:00:05"
</binding>
</basicHttpBinding>
悲哀的是这个好像不行
我也试过像这样在代码文件中手动设置它:
MyClient myClient = new MyClient();
myClient.Endpoint.Binding = new BasicHttpBinding()
{
SendTimeout = new TimeSpan(0, 0, 5),
ReceiveTimeout = new TimeSpan(0, 0, 5)
};
string id = Guid.NewGuid();
string result = myClient.Foo(id);
Console.WriteLine(result);
但同样,它似乎不起作用。
我用一个非常慢的服务测试了它,20 分钟后它终于返回了(正确的)答案,但没有抛出超时异常。
我尝试访问的 WCF 服务是否可能以某种方式阻止超时?
我以前去过这个兔子洞。我想 OperationTimeout
可能就是您要找的。
(myClient as IClientChannel).OperationTimeout = TimeSpan.FromSeconds(5);
差不多一年后回答我自己的问题。
我最初没有解决这个错误,因为它过去很少发生。它最近重新浮出水面,所以我不得不再次深入研究它。
据我所知,没有抛出 TimeoutException,仅仅是因为 SOAP 请求成功完成。只有从请求发出到响应 returns 的那一刻,超时才会被接受。我验证了使用提琴手。但是我的代码仍然挂了好几个小时。
看来阻止我的代码的部分只是对 SOAP 响应的解析。默认 WCF 解析器在尝试将特定响应解析为 XElement 时只是永远挂起。
我正在尝试使用不同的自定义解析器,我会在完成后 post 结果。