【问题标题】:Increase timeout when consumed as web reference (not service reference)作为 Web 参考(不是服务参考)使用时增加超时
【发布时间】:2016-05-13 11:17:58
【问题描述】:

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

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

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

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

在关于 SO 的其他答案中,我看到可以在 web.config &lt;bindings&gt; 或通过代理配置超时期限,但鉴于我的 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>

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

【问题讨论】:

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


    【解决方案1】:

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

    使用时,第三方 Web 服务客户端类 GetData() 强制派生自 SoapHttpClientProtocol。该类派生自HttpWebClientProtocol,派生自WebClientProtocol

    WebClientProtocol 有一个公共属性Timeout,以毫秒为单位。

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

    对 XML Web 服务的同步调用超时,以毫秒为单位。默认值为 100000 毫秒。

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

    因此,Timeout 属性在实例化为 Web 服务客户端时可以直接从代码中获得,我相信这是由于 VS 的魔力:

    SomeComsumedWebService wsc = new SomeComsumedWebService();
    SomeComsumedWebService.Timeout = 600000; // 10 minutes
    var obj = SomeComsumedWebService.MethodToGetData();
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2014-07-19
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多