WCF net.tcp windows服务 - 呼叫持续时间和呼叫未完成的增加随着时间的推移而增加

时间:2010-03-30 14:11:30

标签: c# .net wcf network-programming net.tcp

我有一个Windows服务,它使用ServiceHost类来使用net.tcp绑定来托管WCF服务。我已经对配置进行了一些调整以限制会话以及连接数量,但似乎每隔一段时间我的“呼叫未完成”和“呼叫持续时间”就会上升并保持在perfmon中。在我看来,我在某个地方有泄漏,但我的代码都很小,我依靠ServiceHost来处理细节。

以下是我开始服务的方式

ServiceHost host = new ServiceHost(type);
host.Faulted+=new EventHandler(Faulted);
host.Open();

My Faulted事件只执行以下操作(或多或少,记录等已删除)

if (host.State == CommunicationState.Faulted)
{
  host.Abort();
}
else
{
  host.Close();
}
host = new ServiceHost(type);
host.Faulted+=new EventHandler(Faulted);
host.Open();

以下是我的app.config中的一些片段,以显示我尝试过的一些内容

<runtime>
  <gcConcurrent enabled="true" />
  <generatePublisherEvidence enabled="false" />
</runtime>
.........
<behaviors>
  <serviceBehaviors>
    <behavior name="Throttled">
      <serviceThrottling
        maxConcurrentCalls="300"
        maxConcurrentSessions="300"
        maxConcurrentInstances="300"
      />
..........
<services>
  <service name="MyService" behaviorConfiguration="Throttled">
    <endpoint address="net.tcp://localhost:49001/MyService"
              binding="netTcpBinding"
              bindingConfiguration="Tcp"
              contract="IMyService">
    </endpoint>
  </service>
</services>
..........
<netTcpBinding>
    <binding name="Tcp" openTimeout="00:00:10" closeTimeout="00:00:10" portSharingEnabled="true"
             receiveTimeout="00:5:00" sendTimeout="00:5:00" hostNameComparisonMode="WeakWildcard"
             listenBacklog="1000"
             maxConnections="1000">
      <reliableSession enabled="false"/>
      <security mode="None"/>

    </binding>
  </netTcpBinding>
..........
<!--for my diagnostics-->
<diagnostics performanceCounters="ServiceOnly" wmiProviderEnabled="true" />

显然有些资源被捆绑了,但我认为我用配置覆盖了所有内容。我只有大约150个客户,所以我认为我没有达到我的“300”限制。 “每秒呼叫数”保持不变,每秒2-5个呼叫。该服务将持续数小时和数小时,0-2“呼叫未完成”和非常低的“呼叫持续时间”,然后最终将最多打30个呼叫,20秒呼叫持续时间。

有关可能导致我的“未接来电”和“通话时长”的原因有何提示?我在哪里泄漏?指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

在调用服务时,您执行的代码可能会有一些低效率。没有看到,真的很难诊断。