ASP.NET->;WCF并发问题
我正在开发一个基于Ajax的应用程序,它大量使用对WCF层的服务器调用,WCF层与数据库通信。 只要我在短时间内从客户端(ASP.NET页面)执行许多对底层WCF服务的调用,系统就会挂起并进入空闲状态 如何处理此类并发问题?ASP.NET->;WCF并发问题,asp.net,vb.net,wcf,Asp.net,Vb.net,Wcf,我正在开发一个基于Ajax的应用程序,它大量使用对WCF层的服务器调用,WCF层与数据库通信。 只要我在短时间内从客户端(ASP.NET页面)执行许多对底层WCF服务的调用,系统就会挂起并进入空闲状态 如何处理此类并发问题? 谢谢。没有您的配置是很难帮助的,但是 呼叫后客户是否已处理/香奈尔是否已正确关闭 您的服务是单次通话还是每次通话 您是否尝试过使用其他跟踪工具捕获您的http流量 好吧,假设问题不是DB并发,也不是与web服务器硬件相关的,这里有一些东西可以尝试。。。 WCF有一些限制默
谢谢。没有您的配置是很难帮助的,但是
- 呼叫后客户是否已处理/香奈尔是否已正确关闭
- 您的服务是单次通话还是每次通话
- 您是否尝试过使用其他跟踪工具捕获您的http流量
<!--add a behavior to modify the throttling -->
<behaviors>
<serviceBehaviors>
<behavior name="LessThrottlingBehavior">
<serviceThrottling
maxConcurrentCalls="100"
maxConcurrentSessions="100"
maxConcurrentInstances="100"
/>
</behavior>
</serviceBehaviors>
</behaviors>
<!-- modify the service to point to this behavior -->
<services>
<service name="MyWCFServer.WCFServer" behaviorConfiguration="LessThrottlingBehavior">
</service>
</services>
我怀疑您在.svc和Web.config中打开了
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
您不需要会话,禁用AspNetCompatibilityRequirements将解决您的问题
或者您可能需要只读,以便可以在Global.asax.cs中更改特定svc的SessionStateBehavior。顺序阻塞将停止
protected void Application_BeginRequest(object sender, EventArgs e) {
if (Request.Path.Contains("AjaxTestWCFService.svc")) {
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
}
}
但是请注意,SessionStateBehavior.ReadOnly将阻止写入会话而不会引发异常。写入的值将返回为null
如果您确实需要WCF服务中的读/写会话,您可以尝试使用可能不公开相同阻塞行为的。如果WCF层通过HTTP进行通信,则可能达到HTTP层的最大传出连接数 服务器环境中的默认值为10,这意味着从应用程序服务器到WCF层最多可以有10个并发传出连接。只需根据并发WCF调用的估计数量将此值更改为更大的值 具体来说,将其放入前端web应用程序(调用WCF服务的应用程序,而不是使用WCF服务的应用程序)中的
应用程序\u Start
:
System.Net.ServicePointManager.DefaultConnectionLimit = 200;