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

问题描述 投票:0回答:2

StackOverflow 上有很多类似的问题。如果这是重复的,请对如何在我的上下文中应用其他解决方案进行一些解释。

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

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

WSDL部分是基于Java的服务。我们在 VS2015 中使用它而不会出现问题的唯一方法是将其添加为 Web 参考(对话框中的 2.0)。它工作完美,根据需要使用强类型值,但今天我们看到

My WebApi
WSDL Server
之间出现超时。

在SO的其他答案中,我看到超时时间可以在web.config中配置

<bindings>
或通过代理,但我看不到如何根据我的web.config内容来连接它,这与我的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# 智能感知代码中也找不到任何关于超时的提及。任何帮助或指示将不胜感激。我已经阅读了大约 12 篇关于 SO 的帖子,但仍然无法弄清楚。

c# asp.net web-services wsdl
2个回答
6
投票

我不想回答我自己的问题,但我想我已经找到了答案(如果没有,我会删除)。这是显而易见的,但是在 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();

0
投票

另一个答案已被弃用, 以下是在较新的 .NET 版本中设置超时的方法:

client.ChannelFactory.Endpoint.Binding.SendTimeout = TimeSpan.FromMinutes(10);

资源: https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding

© www.soinside.com 2019 - 2024. All rights reserved.