作为Web引用使用时增加超时(不是服务引用)

时间:2016-05-13 11:17:59

标签: c# asp.net web-services wsdl

StackOverflow上有很多similar个问题。如果这是重复的,我将非常感谢如何在我的背景下应用其他解决方案。

我有一个WebAPI项目。此WebAPI依次调用Web服务(WSDL),处理数据并返回客户端:

[Client] ---->  [My WebAPI] ----> [WSDL Server]
                                        |
       <--------  [My WebAPI] <---------

WSDL部分是基于Java的服务。在VS2015中我们可以毫无问题地使用它的唯一方法是将其添加为Web Reference(对话框中的2.0)。它运行完美,具有强类型值,但今天我们已经看到My WebApiWSDL 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篇帖子,但仍然无法弄清楚。

1 个答案:

答案 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();