在Server 2003的IIS上发布了一个WCF服务用于访问实时数据库,
单个调试时一切正常,当有100个线程同时调用时,会出现如下错误:
请求通道在等待 00:01:00 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能已经是更长超时的一部分。我的web.config文件如下
<?xml version="1.0" encoding="utf-8"?>
<configuration>  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <!--maxConcurrentCalls:最大并发数,默认为16
            maxConcurrentInstances:最大实例数,默认为2147483647
            maxConcurrentSessions:最大的会话数,主要针对于PerSession的情况,默认为10-->
          <serviceThrottling maxConcurrentCalls="10000" maxConcurrentInstances="2147483647" maxConcurrentSessions="10000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer></configuration>应该不是实时数据库的问题,实时数据库的连接数理论上是无限的。服务器配置有4颗CPU,16G内存,应该也不是服务器的问题。
在Google搜索了很多解决方案,还是不能解决问题,大家帮帮忙,

解决方案 »

  1.   

     <serviceThrottling maxConcurrentCalls="10000" maxConcurrentInstances="2147483647" maxConcurrentSessions="10000" />你这个设置没有任何意义,根本用不了这么大的数值,默认参数应付上百并发也不会有多大问题
    1.优化你的wcf 2.设置 WCF Binding 中 OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout
    <netTcpBinding> timeout 属性
    如果是其它类型绑定,你也可以加上类似设置
      

  2.   


    正在对WCF方面进行优化,明天再试一下。更改OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout是治标不治本,个人感觉默认的1分钟够了,先前的单线程GSOAP Service也不用1分钟。