闲置不到5分钟后,WCF服务响应缓慢(Azure上为4.0)

时间:2012-09-06 14:19:03

标签: wcf c#-4.0 azure

我有一个带有2个端点的WCF服务,使用在Azure中的实例上运行的BasicHttpBinding。当第一次调用服务时,响应需要13-16秒(这是预期的),后续请求在150ms到1000ms之间就足够了,具体取决于请求类型(我使用soapUI进行测试)。 / p>

但是,如果我没有发送几分钟少于4或5 分钟)的任何请求,则服务实例似乎不会被重复使用,因为它是只要第一次请求超过13秒就可以了。

我在ServiceBehavior中尝试过“InstanceContextMode = InstanceContextMode.Single”,但这并没有解决问题。

在跟踪中,只要服务响应缓慢,我就可以看到线程ID更改

我还记录了从命中Application_BeginRequest到客户端调用方法的开始的时间,这似乎是这些“慢”调用期间的最大延迟。 我有一些相当大的类代表业务接口,我正在使用Entity Framework来运行Azure VM上的MySQL数据库。 (虽然我认为这不一定是Azure问题。)

无论是调用链接到数据库操作的复杂消息类型还是仅调用简单的“Hello World”响应,响应速度都相同。

  • 即使需要新的服务实例,在IIS重新启动或应用程序池回收后,只要初始加载需要吗?

  • 使用Static类的包装器做一些神奇的帮助吗? (我在想)。

使用C#4.0 / VS2010 Professional构建

1 个答案:

答案 0 :(得分:2)

可能有很多原因导致这种情况发生。我建议你从WCF服务中的一些tracing开始。

  • 使用 TraceSource

    在您的应用中添加一些日志记录
    private TraceSource ts = new TraceSource("MyApp");
    
    public string GetData(int value)
    {
        ts.TraceInformation("GetData called with {0}", value);
    
        return string.Format("You entered: {0}", value);
    }
    
  • 在web.config中配置TraceSource以及System.ServiceModel源。


 <system.diagnostics>
    <sources>
      <source name="MyApp" switchValue="All">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="Logs.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

  • 打开svclog文件,您将能够看到服务中所有内容的详细概述以及每个小步骤需要多长时间。这应该可以帮助您指出问题。

enter image description here