StackOverflow上有很多similar个问题。如果这是重复的,我将非常感谢如何在我的背景下应用其他解决方案。
我有一个WebAPI项目。此WebAPI依次调用Web服务(WSDL),处理数据并返回客户端:
[Client] ----> [My WebAPI] ----> [WSDL Server]
|
<-------- [My WebAPI] <---------
WSDL部分是基于Java的服务。在VS2015中我们可以毫无问题地使用它的唯一方法是将其添加为Web Reference(对话框中的2.0)。它运行完美,具有强类型值,但今天我们已经看到My WebApi
和WSDL Server
之间的超时。
在SO的其他答案中,我看到可以在web.config <bindings>
中或通过代理配置超时时间,但我无法看到如何在给定web.config的情况下将其连接起来。内容,与其他民族大相径庭。下面的代码是在使用WSDL服务时由VS2015生成的:
<system.serviceModel>
<bindings />
<client />
</system.serviceModel>
<applicationSettings>
<MyWebAPI.Properties.Settings>
<setting name="MyWebAPIs_ThirdPartyWSDLService_GetData" serializeAs="String">
<value>https://wsdl.domain.com/webservices/services/GetData</value>
</setting>
</MyWebAPIs.Properties.Settings>
</applicationSettings>
我也无法在c#intellisense代码中找到任何超时的提及。任何帮助或指示将不胜感激。我已经阅读了有关SO的12篇帖子,但仍然无法弄清楚。
答案 0 :(得分:3)
我讨厌回答我自己的问题,但我想我找到了答案(如果没有,我会删除)。这是显而易见的,但在SO上阅读太多实际上让我偏离了正轨,我正在检查VS中的错误类。
使用时,第三方Web服务客户端类GetData()
必须从SoapHttpClientProtocol
派生。此类派生自HttpWebClientProtocol
,派生自WebClientProtocol
。
WebClientProtocol有一个公共属性Timeout
,用毫秒表示。
指示XML Web服务客户端等待对同步XML Web服务请求的回复时间(以毫秒为单位)。
对XML Web服务进行同步调用的超时时间(以毫秒为单位)。默认值为100000毫秒。
将Timeout属性设置为Timeout.Infinite表示请求没有超时。即使XML Web服务客户端可以将Timeout属性设置为不超时,Web服务器仍然可以使请求在服务器端超时。
因此,在实例化为Web服务客户端时,Timeout
属性可直接从代码中获取,我相信是由于VS的魔力:
SomeComsumedWebService wsc = new SomeComsumedWebService();
SomeComsumedWebService.Timeout = 600000; // 10 minutes
var obj = SomeComsumedWebService.MethodToGetData();