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有一些限制默

我正在开发一个基于Ajax的应用程序,它大量使用对WCF层的服务器调用,WCF层与数据库通信。 只要我在短时间内从客户端(ASP.NET页面)执行许多对底层WCF服务的调用,系统就会挂起并进入空闲状态

如何处理此类并发问题?
谢谢。

没有您的配置是很难帮助的,但是

  • 呼叫后客户是否已处理/香奈尔是否已正确关闭
  • 您的服务是单次通话还是每次通话
  • 您是否尝试过使用其他跟踪工具捕获您的http流量

好吧,假设问题不是DB并发,也不是与web服务器硬件相关的,这里有一些东西可以尝试。。。 WCF有一些限制默认值,导致我的一个应用程序出现类似问题。默认值非常低(大约20个并发调用/会话/实例) 将以下内容添加到配置中:

<!--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;