WCF net.tcp windows service - длительность звонка и количество незавершенных звонков увеличивается с течением времени - PullRequest
1 голос
/ 30 марта 2010

У меня есть служба Windows, которая использует класс ServiceHost для размещения службы WCF с использованием привязки net.tcp. Я сделал некоторые настройки для настройки сессий газа, а также количества соединений, но кажется, что время от времени мои «Вызовы невыполненные» и «Продолжительность звонка» поднимаются и остаются в perfmon. Мне кажется, что у меня где-то есть утечка, но мой код достаточно минимален, я полагаюсь на ServiceHost для обработки деталей.

Вот как я начинаю свою службу

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

Событие «Мой сбой» выполняет следующее (более или менее удалено ведение журнала и т. Д.)

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 голосов
/ 03 апреля 2010

Это может быть неэффективность в коде, который вы выполняете при вызове сервиса. Не видя этого, трудно поставить диагноз.

...