作为 Web 参考(而非服务参考)使用时增加超时

Evi*_*lDr 3 c# asp.net wsdl web-services

StackOverflow 上有很多类似的问题。如果这是重复的,我希望能稍微解释一下如何在我的上下文中应用其他解决方案。

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

[Client] ---->  [My WebAPI] ----> [WSDL Server]
                                        |
       <--------  [My WebAPI] <---------
Run Code Online (Sandbox Code Playgroud)

WSDL 部分是基于 Java 的服务。在 VS2015 中我们可以毫无问题地使用它的唯一方法是将它添加为 Web 参考(对话框中的 2.0)。它工作得很好,根据需要使用强类型值,但今天我们看到了My WebApi和之间的超时WSDL Server

在 SO 的其他答案中,我看到可以在 web.config 中<bindings>或通过代理配置超时期限,但鉴于我的 web.config 内容与其他人有很大不同,我看不出如何将其连接起来。下面的代码是VS2015消费WSDL服务时生成的:

<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>
Run Code Online (Sandbox Code Playgroud)

我也无法在 c# 智能感知代码中找到任何关于超时的内容。任何帮助或指示将不胜感激。我已经阅读了大约 12 篇关于 SO 的帖子,但仍然无法弄清楚。

Evi*_*lDr 6

我不想回答我自己的问题,但我想我已经找到了答案(如果没有,我会删除)。这是显而易见的,但是在 SO 上阅读太多实际上让我偏离了方向,而且我在 VS 中检查了错误的课程。

使用时,第三方 Web 服务客户端类GetData()被迫从SoapHttpClientProtocol. 这个类派生自HttpWebClientProtocol,派生自WebClientProtocol.

WebClientProtocol有一个公共属性Timeout,以毫秒表示。

指示 XML Web services 客户端等待对同步 XML Web services 请求的答复到达的时间(以毫秒为单位)。

同步调用 XML Web services 的超时时间(以毫秒为单位)。默认值为 100000 毫秒。

将 Timeout 属性设置为 Timeout.Infinite 表示请求不会超时。即使 XML Web 服务客户端可以将 Timeout 属性设置为不超时,Web 服务器仍然会导致请求在服务器端超时。

因此,Timeout当实例化为 Web 服务客户端时,该属性可直接从代码中获得,我相信这是由于 VS 的神奇之处:

SomeComsumedWebService wsc = new SomeComsumedWebService();
SomeComsumedWebService.Timeout = 600000; // 10 minutes
var obj = SomeComsumedWebService.MethodToGetData();
Run Code Online (Sandbox Code Playgroud)