加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在异步ASP.NET Web服务调用上定义客户端超时?

发布时间:2020-12-15 19:44:50 所属栏目:百科 来源:网络整理
导读:今天我已经搜索了一些特定的案例来调用具有以下要求的(外部)ASP.NET Web服务: 调用必须异步完成 必须实现超时,因为Web服务可能需要很长时间才能执行 在互联网和StackOverflow上出现了很多关于这个主题的问题,但要么是过时的,要么建议使用仅适用于同步调用的
今天我已经搜索了一些特定的案例来调用具有以下要求的(外部)ASP.NET Web服务:

>调用必须异步完成
>必须实现超时,因为Web服务可能需要很长时间才能执行

在互联网和StackOverflow上出现了很多关于这个主题的问题,但要么是过时的,要么建议使用仅适用于同步调用的WebRequest.TimeOut属性.

一种替代方法是使用System.Threading.Timer.在开始呼叫之前启动计时器,并在到达TimerCallback时取消它.

但是,我认为对这种情况应该有一种更常见的方法.不幸的是到目前为止找不到它.任何人都有想法在异步Web服务调用上设置客户端超时?

提前致谢.

解决方法

请检查你的app.config它将有一些servicemodel设置,它有各种可配置的值.

当我添加新的服务参考时,我可以在app.config中看到以下内容,

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="HeaderedServiceSoap" 
                     closeTimeout="00:01:00" 
                     openTimeout="00:01:00"
                     receiveTimeout="00:10:00" 
                     sendTimeout="00:01:00" 
                     allowCookies="false"
                     bypassProxyOnLocal="false" 
                     hostNameComparisonMode="StrongWildcard"
                     maxBufferSize="65536" 
                     maxBufferPoolSize="524288" 
                     maxReceivedMessageSize="65536"
                     messageEncoding="Text" 
                     textEncoding="utf-8" 
                     transferMode="Buffered"
                     useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" 
                              maxStringContentLength="8192" 
                              maxArrayLength="16384"
                              maxBytesPerRead="4096" 
                              maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" 
                               proxyCredentialType="None"
                               realm="" />
                    <message clientCredentialType="UserName" 
                             algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint 
          address="http://localhost/MyService.asmx"
          binding="basicHttpBinding" 
          bindingConfiguration="HeaderedServiceSoap"
          contract="WSTest.HeaderedServiceSoap" 
          name="HeaderedServiceSoap" />
    </client>
</system.serviceModel>

尝试再次删除和添加引用,确保您的应用程序的目标框架是4.0,并且您正在添加服务引用(不是Web引用).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读