Skip to main content
 首页 » 编程设计

c#之尝试调用 Web 服务时出现 channel 超时错误

2024年01月29日21txw1958

调用时出现这个错误

请求 channel 在 00:00:59.9970702 之后等待回复时超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。分配给此操作的时间可能是较长超时的一部分。

我在SO中看到过这个 WCF stops responding after about 10 or so calls (throttling)

但我不知道我必须在哪里实现这个..无论是在我的 webconfig 文件还是 webservice 配置文件..有什么建议吗?

编辑(1):

这是我的网络配置文件

<system.serviceModel> 
                <bindings> 
            <basicHttpBinding> 
                <binding name="BinaryCertTokenOverSSL" 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="TransportWithMessageCredential"> 
                        <transport clientCredentialType="None" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="Certificate" algorithmSuite="Default" /> 
                    </security> 
                </binding> 
                <binding name="UserNameTokenOverSSLBinding" 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="TransportWithMessageCredential"> 
                        <transport clientCredentialType="None" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
                    </security> 
                </binding> 
            </basicHttpBinding> 
            <wsHttpBinding> 
                <binding name="WSBinaryCertReliable" closeTimeout="00:01:00" 
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
                    allowCookies="false"> 
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
                        enabled="true" /> 
                    <security mode="Message"> 
                        <transport clientCredentialType="Windows" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="Certificate" negotiateServiceCredential="false" 
                            algorithmSuite="Default" establishSecurityContext="true" /> 
                    </security> 
                </binding> 
                <binding name="WSUserNameReliable" closeTimeout="00:01:00" openTimeout="00:01:00" 
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
                    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
                    allowCookies="false"> 
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
                        enabled="true" /> 
                    <security mode="Message"> 
                        <transport clientCredentialType="Windows" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="UserName" negotiateServiceCredential="false" 
                            algorithmSuite="Default" establishSecurityContext="true" /> 
                    </security> 
                </binding> 
                <binding name="WSBinaryCert" closeTimeout="00:01:00" openTimeout="00:01:00" 
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
                    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
                    allowCookies="false"> 
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
                        enabled="false" /> 
                    <security mode="Message"> 
                        <transport clientCredentialType="Windows" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="Certificate" negotiateServiceCredential="false" 
                            algorithmSuite="Default" establishSecurityContext="false" /> 
                    </security> 
                </binding> 
                <binding name="WSUserName" closeTimeout="00:01:00" openTimeout="00:01:00" 
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" 
                    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
                    allowCookies="false"> 
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
                        enabled="false" /> 
                    <security mode="Message"> 
                        <transport clientCredentialType="Windows" proxyCredentialType="None" 
                            realm="" /> 
                        <message clientCredentialType="UserName" negotiateServiceCredential="false" 
                            algorithmSuite="Default" establishSecurityContext="false" /> 
                    </security> 
                </binding> 
            </wsHttpBinding> 
        </bindings> 
        <client> 
            <endpoint address="http://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/WsBinaryCertReliable" 
                binding="wsHttpBinding" bindingConfiguration="WSBinaryCertReliable" 
                contract="IVWSecurityServices" name="WSBinaryCertReliable"> 
                <identity> 
                    <certificate encodedValue="AwAAAAEAAAAUAAAAch9c8R+87NcfIPn0imYdQaHEFp8gAAAAAQAAAFcCAAAwggJTMIIBvKADAgECAhA3Zx4Bjx6gs0Cu4C0/9OpuMA0GCSqGSIb3DQEBBAUAMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTAeFw05OTEyMzExODMwMDBaFw0xNDEyMzExODMwMDBaMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtcad6zbauhN5mo54MDt4JAuTtU0MIOuhXhsUGIGYkZ4+mhav3oCRiALzQWLfmm6jQZAsW8LXE/p1UZLfenaHRWTcDxZ0Qvuow51NU4r30Fr7U+XQCQNytaVHI/aYk2CreaOoPzlMxrFjw33yShBi9LXsM7FQZL3sAWFro2/A74sCAwEAAaN2MHQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwXQYDVR0BBFYwVIAQI72gtckgLr+CwMqK5vo11qEuMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbYIQN2ceAY8eoLNAruAtP/TqbjANBgkqhkiG9w0BAQQFAAOBgQAYUlt7PX01iokgi8jW96tdBiaJIb7XBt9DgUPqAhunbSrPq/sNaIy+hLBJ7W174Ozh0r/cJp18WoCD8S0IbBvvs3aSaCoBPAa+Rb2OSx21QgEpZ5+flxaXK9HxY0WmmTXRqsgR4bplZ5F1RFX9x6Px+yyQzu+IBPpwcL8JSs+pvA==" /> 
                </identity> 
            </endpoint> 
            <endpoint address="https://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/BinaryCertTokenOverSSL" 
                binding="basicHttpBinding" bindingConfiguration="BinaryCertTokenOverSSL" 
                contract="IVWSecurityServices" name="BinaryCertTokenOverSSL" /> 
            <endpoint address="http://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/WSUserNameReliable" 
                binding="wsHttpBinding" bindingConfiguration="WSUserNameReliable" 
                contract="IVWSecurityServices" name="WSUserNameReliable"> 
                <identity> 
                    <certificate encodedValue="AwAAAAEAAAAUAAAAch9c8R+87NcfIPn0imYdQaHEFp8gAAAAAQAAAFcCAAAwggJTMIIBvKADAgECAhA3Zx4Bjx6gs0Cu4C0/9OpuMA0GCSqGSIb3DQEBBAUAMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTAeFw05OTEyMzExODMwMDBaFw0xNDEyMzExODMwMDBaMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtcad6zbauhN5mo54MDt4JAuTtU0MIOuhXhsUGIGYkZ4+mhav3oCRiALzQWLfmm6jQZAsW8LXE/p1UZLfenaHRWTcDxZ0Qvuow51NU4r30Fr7U+XQCQNytaVHI/aYk2CreaOoPzlMxrFjw33yShBi9LXsM7FQZL3sAWFro2/A74sCAwEAAaN2MHQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwXQYDVR0BBFYwVIAQI72gtckgLr+CwMqK5vo11qEuMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbYIQN2ceAY8eoLNAruAtP/TqbjANBgkqhkiG9w0BAQQFAAOBgQAYUlt7PX01iokgi8jW96tdBiaJIb7XBt9DgUPqAhunbSrPq/sNaIy+hLBJ7W174Ozh0r/cJp18WoCD8S0IbBvvs3aSaCoBPAa+Rb2OSx21QgEpZ5+flxaXK9HxY0WmmTXRqsgR4bplZ5F1RFX9x6Px+yyQzu+IBPpwcL8JSs+pvA==" /> 
                </identity> 
            </endpoint> 
            <endpoint address="http://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/WSBinaryCert" 
                binding="wsHttpBinding" bindingConfiguration="WSBinaryCert" 
                contract="IVWSecurityServices" name="WSBinaryCert"> 
                <identity> 
                    <certificate encodedValue="AwAAAAEAAAAUAAAAch9c8R+87NcfIPn0imYdQaHEFp8gAAAAAQAAAFcCAAAwggJTMIIBvKADAgECAhA3Zx4Bjx6gs0Cu4C0/9OpuMA0GCSqGSIb3DQEBBAUAMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTAeFw05OTEyMzExODMwMDBaFw0xNDEyMzExODMwMDBaMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtcad6zbauhN5mo54MDt4JAuTtU0MIOuhXhsUGIGYkZ4+mhav3oCRiALzQWLfmm6jQZAsW8LXE/p1UZLfenaHRWTcDxZ0Qvuow51NU4r30Fr7U+XQCQNytaVHI/aYk2CreaOoPzlMxrFjw33yShBi9LXsM7FQZL3sAWFro2/A74sCAwEAAaN2MHQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwXQYDVR0BBFYwVIAQI72gtckgLr+CwMqK5vo11qEuMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbYIQN2ceAY8eoLNAruAtP/TqbjANBgkqhkiG9w0BAQQFAAOBgQAYUlt7PX01iokgi8jW96tdBiaJIb7XBt9DgUPqAhunbSrPq/sNaIy+hLBJ7W174Ozh0r/cJp18WoCD8S0IbBvvs3aSaCoBPAa+Rb2OSx21QgEpZ5+flxaXK9HxY0WmmTXRqsgR4bplZ5F1RFX9x6Px+yyQzu+IBPpwcL8JSs+pvA==" /> 
                </identity> 
            </endpoint> 
            <endpoint address="http://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/WSUserName" 
                binding="wsHttpBinding" bindingConfiguration="WSUserName" 
                contract="IVWSecurityServices" name="WSUserName"> 
                <identity> 
                    <certificate encodedValue="AwAAAAEAAAAUAAAAch9c8R+87NcfIPn0imYdQaHEFp8gAAAAAQAAAFcCAAAwggJTMIIBvKADAgECAhA3Zx4Bjx6gs0Cu4C0/9OpuMA0GCSqGSIb3DQEBBAUAMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTAeFw05OTEyMzExODMwMDBaFw0xNDEyMzExODMwMDBaMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtcad6zbauhN5mo54MDt4JAuTtU0MIOuhXhsUGIGYkZ4+mhav3oCRiALzQWLfmm6jQZAsW8LXE/p1UZLfenaHRWTcDxZ0Qvuow51NU4r30Fr7U+XQCQNytaVHI/aYk2CreaOoPzlMxrFjw33yShBi9LXsM7FQZL3sAWFro2/A74sCAwEAAaN2MHQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwXQYDVR0BBFYwVIAQI72gtckgLr+CwMqK5vo11qEuMCwxKjAoBgNVBAMTIXJhbWNvdm0xMzQucnNpbWFpbC5yc2lsLnJhbWNvLmNvbYIQN2ceAY8eoLNAruAtP/TqbjANBgkqhkiG9w0BAQQFAAOBgQAYUlt7PX01iokgi8jW96tdBiaJIb7XBt9DgUPqAhunbSrPq/sNaIy+hLBJ7W174Ozh0r/cJp18WoCD8S0IbBvvs3aSaCoBPAa+Rb2OSx21QgEpZ5+flxaXK9HxY0WmmTXRqsgR4bplZ5F1RFX9x6Px+yyQzu+IBPpwcL8JSs+pvA==" /> 
                </identity> 
            </endpoint> 
            <endpoint address="https://XXXvm134.rsimail.rsil.XXX.com/VWWebservice/VWSecurityServices.svc/UserNameTokenOverSSL" 
                binding="basicHttpBinding" bindingConfiguration="UserNameTokenOverSSLBinding" 
                contract="IVWSecurityServices" name="UserNameTokenOverSSLBinding" /> 
        </client> 
    </system.serviceModel> 

这是我的网络服务配置文件

<system.serviceModel> 
    <extensions> 
      <bindingElementExtensions> 
        <add name="sslOffloadedHttpsTransport" type="XXX.VW.Web.Services.CustomBinding.SSLOffloadedHttpsTransportElement, XXX.VW.RT.WebServices.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
      </bindingElementExtensions> 
    </extensions> 
    <behaviors> 
      <serviceBehaviors> 
      <behavior name="e-ServiceBehavior"> 
          <serviceCredentials> 
            <clientCertificate> 
              <authentication certificateValidationMode="None" revocationMode="Online" /> 
            </clientCertificate> 
            <serviceCertificate findValue="XXXvm134.rsimail.rsil.XXX.com" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" /> 
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="XXX.VW.RT.VWCustomUserValidator,XXX.VW.RT.Library" /> 
          </serviceCredentials> 
          <serviceDebug includeExceptionDetailInFaults="true" /> 
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> 
          <serviceAuthorization principalPermissionMode="None" /> 
        </behavior> 
      </serviceBehaviors> 
    </behaviors> 
    <bindings> 
      <basicHttpBinding> 
        <binding name="UserNameTokenOverSSLBinding"> 
          <security mode="TransportWithMessageCredential" /> 
        </binding> 
        <binding name="BinaryCertTokenOverSSLBinding" closeTimeout="00:10:00" openTimeout="00:10:00" sendTimeout="00:10:00"> 
          <security mode="TransportWithMessageCredential"> 
            <message clientCredentialType="Certificate" /> 
          </security> 
        </binding> 
         <binding name="Vw30BasicHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferSize="65536" maxReceivedMessageSize="65536"> 
          <security> 
            <transport clientCredentialType="None" /> 
            <message clientCredentialType="UserName" /> 
          </security> 
        </binding> 
      </basicHttpBinding> 
      <customBinding> 
          <binding name="Vw30netTcpHABinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"> 
            <binaryMessageEncoding> 
            <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
            </binaryMessageEncoding> 
            <tcpTransport maxBufferPoolSize="524288" maxReceivedMessageSize="99999998" connectionBufferSize="8192" hostNameComparisonMode="StrongWildcard" channelInitializationTimeout="00:01:00" maxBufferSize="99999998" maxPendingConnections="20" maxOutputDelay="00:00:00.2000000" maxPendingAccepts="5" transferMode="Buffered" listenBacklog="20" portSharingEnabled="false" teredoEnabled="false"> 
            <connectionPoolSettings groupName="default" leaseTimeout="00:00:02" idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" /> 
            </tcpTransport> 
            </binding> 
            <binding name="Vw30HttpHABinding"> 
            <textMessageEncoding /> 
            <httpTransport keepAliveEnabled="false"> 
            </httpTransport> 
        </binding>  
 
        <binding name="UserNameTokenOverSSLOffloaderBinding"> 
          <textMessageEncoding messageVersion="Soap11" /> 
          <security authenticationMode="UserNameOverTransport"> 
            <secureConversationBootstrap /> 
          </security> 
          <sslOffloadedHttpsTransport /> 
        </binding> 
        <binding name="BinaryCertTokenOverSSLOffloaderBinding"> 
          <textMessageEncoding messageVersion="Soap11" /> 
          <security authenticationMode="UserNameOverTransport"> 
            <secureConversationBootstrap /> 
          </security> 
          <sslOffloadedHttpsTransport /> 
        </binding> 
      </customBinding> 
      <netTcpBinding> 
        <binding name="Vw30netTcpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536"> 
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> 
          <security mode="None"> 
            <transport clientCredentialType="None" protectionLevel="None" /> 
            <message clientCredentialType="None" /> 
          </security> 
        </binding> 
      </netTcpBinding> 
      <wsHttpBinding> 
        <binding name="WSUserNameBinding" transactionFlow="true"> 
          <security> 
            <transport clientCredentialType="None" /> 
            <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false" /> 
          </security> 
        </binding> 
        <binding name="WSBinaryCertBinding" transactionFlow="true"> 
          <security> 
            <transport clientCredentialType="None" /> 
            <message clientCredentialType="Certificate" negotiateServiceCredential="false" establishSecurityContext="false" /> 
          </security> 
        </binding> 
        <binding name="WSUserNameReliableBinding" closeTimeout="00:10:00" openTimeout="00:10:00" sendTimeout="00:10:00" transactionFlow="true"> 
          <reliableSession enabled="true" /> 
          <security> 
            <transport clientCredentialType="None" /> 
            <message clientCredentialType="UserName" negotiateServiceCredential="false" /> 
          </security> 
        </binding> 
        <binding name="WsBinaryCertReliableBinding" transactionFlow="true"> 
          <reliableSession enabled="true" /> 
          <security> 
            <transport clientCredentialType="None" /> 
            <message clientCredentialType="Certificate" negotiateServiceCredential="false" /> 
          </security> 
        </binding> 
      </wsHttpBinding> 
    </bindings> 
    <services configSource="Web.Services.config" />     
    <!--Should be uncommented when webservices are consumed through SSL Offloaders, and the application pool should be set to use .NET framework 4.0. --> 
    <!--<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> --> 
  </system.serviceModel>     

请您参考如下方法:

这通常归结为 session 和节流

在 .NET 4 之前,并发 session 的默认最大数量为 10。这意味着第 11 个并发 session 等待其他 session 之一消失,最终将达到客户端发送超时(默认为 1 分钟)

在 .NET 4 之后,默认值为 100 x 处理器(内核)数量,因此被命中的可能性要小得多

您有 3 个选择:

  1. 增加 session 限制 http://www.codegain.com/articles/wcf/security/wcf-service-throttling-behavior.aspx
  2. 更快地关闭现有 session (确保您及时调用代理上的 Close)
  3. 增加客户端的发送超时