在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搜索了很多解决方案,还是不能解决问题,大家帮帮忙,
单个调试时一切正常,当有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.优化你的wcf 2.设置 WCF Binding 中 OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout
<netTcpBinding> timeout 属性
如果是其它类型绑定,你也可以加上类似设置
正在对WCF方面进行优化,明天再试一下。更改OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout是治标不治本,个人感觉默认的1分钟够了,先前的单线程GSOAP Service也不用1分钟。