Клиент WCF получает TimeoutException (и я закрываю свои соединения) - PullRequest
1 голос
/ 21 мая 2009

Вот в чем дело ... Я давно работаю над этим вопросом, не повезло

У меня есть служба WCF, размещенная на IIS (я также пробовал на хосте консоли, и у меня такое же поведение), который я вызываю через прокси-сервер, созданный scvutil, и служба не отвечает после нескольких (очень мало вызовов).

Но вот несколько подсказок:
1- Это происходит только в среде тестирования (не с сервисами, размещенными на моем компьютере разработчика), цифры!
2- я вызываю службу асинхронно (client.MyServiceAsync)
3 - это самый хитрый ... если я запускаю fiddler, чтобы увидеть, что происходит, клиент работает и никогда не выходит из строя, конечно, я закрываю fiddler (даже без перезапуска клиента)

Понятия не имею, что происходит. Я начал думать, что, возможно, сервер (Win2003) имеет своего рода «защитника», который блокирует дальнейшие соединения, это возможно? Пожалуйста, поверьте мне, когда я говорю, что закрываю клиентов после каждого вызова, фактически после того, как получаю ответ от сервера, так как я использую асинхронные вызовы.

Любой совет или совет будут более чем оценены. С уважением,

Редактировать: Я думал, что это может быть полезной информацией: Я включил трассировку на обоих концах без удачи.
На стороне сервера я вижу, что соединения приходят и уходят ... и в какой-то момент больше нет входящих соединений. В то время как на стороне клиента я вижу, что соединение работает, пока одно из них не сгенерирует TimeoutException ... это все, что я получаю

Ответы [ 3 ]

2 голосов
/ 25 мая 2009

Хорошо, вот как я исправил проблему, если кто-то столкнулся с той же проблемой.
Мои сервисы, вызванные асинхронно, возвращали поток, и этот поток не размещался на клиенте, поэтому прокси не освобождались.

Спасибо всем за комментарии. Они как бы привели меня к решению, так как не было ничего НОВОГО, чего я раньше не слышал.

2 голосов
/ 21 мая 2009

Лучше всего было бы включить трассировку как на клиенте, так и на сервисе, чтобы увидеть поток контроля. По крайней мере, тогда вы получите представление о действиях, предпринимаемых WCF.

Вот информация о включении трассировки: http://msdn.microsoft.com/en-us/library/ms733025.aspx

И я бы рекомендовал загружать трассировки на стороне клиента и на стороне сервера в инструмент Service Trace Viewer, чтобы вы могли видеть взаимосвязанные события. Вот еще немного информации об этом инструменте и как прочитать вывод: http://msdn.microsoft.com/en-us/library/aa751795.aspx

Этот инструмент неоценим для отладки такого рода вещей. Надеюсь, вы сразу увидите, что происходит.

Если вы все еще не видите нужную вам информацию, вы можете также попробовать вести журнал сообщений (средство просмотра трассировки службы также может прочитать эти файлы).

Я действительно думаю, что вы на правильном пути, думая, что соединения не закрываются должным образом. Особенно с асинхронными операциями, это легко сделать, не осознавая этого. Это случалось со мной в прошлом, когда я воссоздавал свой клиентский объект до того, как сработал конечный запрос. Это заставило меня закрыть соединение со вторым объектом, но не первым. Наблюдатель трассировки очень быстро указал мне на это.

0 голосов
/ 29 августа 2009

WCF поддерживает регулирование обслуживания. Это позволяет вам ограничить количество сообщений / соединений / экземпляров, которые могут работать одновременно. Поиск ServiceThrottle на MSDN.

Вы указываете свой ServiceThrottle в конфигурации приложения следующим образом:

 <behaviors>
      <serviceBehaviors>
        <behavior  name="Throttled">
          <serviceThrottling 
            maxConcurrentCalls="1" 
            maxConcurrentSessions="2200" 
            maxConcurrentInstances="1"
          />
        </behavior>
      </serviceBehaviors>
    </behaviors>

Если вы подозреваете, что проблема заключается в регулировании, найдите объект ServiceThrottle в отладчике или в дампе. Вот пример использования cdb для дампа:

Дамп ServiceHost

0:000> !do 0000000001647fc0
Name: System.ServiceModel.ServiceHost
MethodTable: 000007feef98a7f0
EEClass: 000007feef352d60
Size: 248(0xf8) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007fef23d5918  400098a       4c       System.Boolean  1 instance                0 aborted
000007fef23d5918  400098b       4d       System.Boolean  1 instance                0 closeCalled
000007feef93aa00  400098c        8 ...ct+ExceptionQueue  0 instance 0000000000000000 exceptionQueue
000007fef23d6038  400098d       10        System.Object  0 instance 0000000001648188 mutex
000007fef23d5918  400098e       4e       System.Boolean  1 instance                0 onClosingCalled
000007fef23d5918  400098f       4f       System.Boolean  1 instance                0 onClosedCalled
000007fef23d5918  4000990       50       System.Boolean  1 instance                1 onOpeningCalled
000007fef23d5918  4000991       51       System.Boolean  1 instance                1 onOpenedCalled
000007fef23d5918  4000992       52       System.Boolean  1 instance                0 raisedClosed
000007fef23d5918  4000993       53       System.Boolean  1 instance                0 raisedClosing
000007fef23d5918  4000994       54       System.Boolean  1 instance                0 raisedFaulted
000007fef23d5918  4000995       55       System.Boolean  1 instance                1 traceOpenAndClose
000007fef23d6038  4000996       18        System.Object  0 instance 0000000001647fc0 eventSender
000007feef929a60  4000997       48         System.Int32  1 instance                2 state
000007fef23ce158  4000998       20  System.EventHandler  0 instance 0000000000000000 Closed
000007fef23ce158  4000999       28  System.EventHandler  0 instance 0000000000000000 Closing
000007fef23ce158  400099a       30  System.EventHandler  0 instance 0000000001648660 Faulted
000007fef23ce158  400099b       38  System.EventHandler  0 instance 0000000000000000 Opened
000007fef23ce158  400099c       40  System.EventHandler  0 instance 0000000000000000 Opening
000007fef23d5918  4002e78       56       System.Boolean  1 instance                1 initializeDescriptionHasFinished
000007feef981300  4002e79       58 ...meKeyedCollection  0 instance 00000000016481a0 baseAddresses
000007feef981500  4002e7a       60 ...patcherCollection  0 instance 0000000001648220 channelDispatchers
000007fef2416b80  4002e7b       c0      System.TimeSpan  1 instance 0000000001648080 closeTimeout
000007feef980e70  4002e7c       68 ...erviceDescription  0 instance 0000000001656e28 description
0000000000000000  4002e7d       70                       0 instance 0000000001648290 extensions
0000000000000000  4002e7e       78                       0 instance 0000000000000000 externalBaseAddresses
0000000000000000  4002e7f       80                       0 instance 000000000166cf80 implementedContracts
000007feef989770  4002e80       88 ...nceContextManager  0 instance 0000000001648300 instances
000007fef2416b80  4002e81       c8      System.TimeSpan  1 instance 0000000001648088 openTimeout
000007feef8e9890  4002e82       90 ...rformanceCounters  0 instance 0000000000000000 servicePerformanceCounters
000007feef98b708  4002e83       98 ...rformanceCounters  0 instance 000000000171c590 defaultPerformanceCounters
000007feef981a18  4002e84       a0 ...r.ServiceThrottle  0 instance 0000000001648340 serviceThrottle
000007feef980c20  4002e85       a8 ...erviceCredentials  0 instance 0000000001800ed0 readOnlyCredentials
000007feef980d58  4002e86       b0 ...orizationBehavior  0 instance 0000000001801240 readOnlyAuthorization
0000000000000000  4002e87       b8                       0 instance 0000000000000000 UnknownMessageReceived
000007fef53bc640  4002e77      f80           System.Uri  0   static 0000000001648110 EmptyUri
000007fef23d6038  40032cc       d0        System.Object  0 instance 00000000015be070 singletonInstance
000007fef23d8420  40032cd       d8          System.Type  0 instance 00000000016486a0 serviceType
000007feef981ee0  40032ce       e0 ...ontractCollection  0 instance 0000000001657468 reflectedContracts
000007fef23d1000  40032cf       e8   System.IDisposable  0 instance 0000000000000000 disposableInstance

Информация о регулировании дампа для ServiceHost

0:000> !do 0000000001648340
Name: System.ServiceModel.Dispatcher.ServiceThrottle
MethodTable: 000007feef981a18
EEClass: 000007feef34c2d8
Size: 72(0x48) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007feef981a90  400371d        8 ...cher.FlowThrottle  0 instance 00000000016484a8 calls
000007feef981a90  400371e       10 ...cher.FlowThrottle  0 instance 00000000016485d8 sessions
000007feef902140  400371f       18 ...her.QuotaThrottle  0 instance 0000000000000000 dynamic
000007feef981a90  4003720       20 ...cher.FlowThrottle  0 instance 0000000001779f80 instanceContexts
000007feef9808c8  4003721       28 ...l.ServiceHostBase  0 instance 0000000001647fc0 host
000007fef23d5918  4003722       38       System.Boolean  1 instance                1 isActive
000007fef23d6038  4003723       30        System.Object  0 instance 0000000001648410 thisLock

Информация о регулировании дамп-сессии

0:000> !do 00000000016485d8
Name: System.ServiceModel.Dispatcher.FlowThrottle
MethodTable: 000007feef981a90
EEClass: 000007feef34c390
Size: 64(0x40) bytes
 (D:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
000007fef23dd9b8  40034f5       30         System.Int32  1 instance             2220 capacity
000007fef23dd9b8  40034f6       34         System.Int32  1 instance             **2220 count
000007fef23d6038  40034f7        8        System.Object  0 instance 0000000001648618 mutex
000007fef23c4d70  40034f8       10 ...ding.WaitCallback  0 instance 0000000001648598 release
0000000000000000  40034f9       18                       0 instance 0000000001648630 waiters
000007fef23d6748  40034fa       20        System.String  0 instance 00000000016483c8 propertyName
000007fef23d6748  40034fb       28        System.String  0 instance 0000000001648550 configName
0:000>
...