WCF: Как диагностировать неисправные каналы? - PullRequest
4 голосов
/ 08 октября 2010

Я работаю над доставкой изменений в моей лаборатории, которые, надеюсь, помогут диагностировать какую-то странную странную ошибку канала, которую мы наблюдаем. Есть тестовое приложение, которое использует DuplexChannelFactory для подключения к нескольким службам Windows, и по какой-то причине каналы в этом тестовом приложении, кажется, неисправны. У меня есть планы по реализации некоторой логики повторов, но было бы здорово выяснить, почему именно они неисправны.

Я знаю, что все фабрики каналов и прокси-объекты реализуют множество интерфейсов, и я использовал отражатель, чтобы пролистать некоторые из них, но я не нашел ничего похожего на то, что я ищу. Есть ли способ запросить эти объекты после их сбоя, чтобы получить некоторую информацию о том, что вызвало сбой?

Редактировать: конфигурация очень проста: привязка - это просто построенная по умолчанию NetTcpBinding, реализация службы имеет [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)], и никаких специальных атрибутов нет ни для одной из операций в контракте на обслуживание. Тем не менее, я спрашиваю больше об общих методах диагностики неисправностей каналов, а не диагностики этого конкретного случая. Я не ожидал бы, что особенности конфигурации будут иметь слишком большое влияние на это; если что-нибудь, детали конфигурации будут возвращены указанной диагностикой, верно?

Ответы [ 4 ]

5 голосов
/ 09 октября 2010

Ответы Ладислава и Шираз все хорошо, и я дал им + 1.

Все, что я могу добавить к ним, - это то, что обычно неисправный канал является результатом необработанного исключения на сервере. Когда это происходит, WCF считает, что с сервером что-то принципиально не так, и отключает канал, так что он не может быть использован.

Правильный подход - который, я считаю, должен был использоваться по умолчанию и предоставляться бесплатно - для службы перехватить исключение, создать исключение FaultException и вернуть его (посмотрите на этот пример формы http://www.c -sharpcorner.com /UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx)

Причина, по которой WCF не делает по умолчанию, заключается в том, что он меняет контракт и WSDL, поэтому клиент должен получить обновленный WSDL.

Так что на вашем месте я бы ловил исключения, регистрировал их, а затем возвращал исключение сбоя, и таким образом я бы знал, в чем проблема, и каналы не неисправны.

4 голосов
/ 08 октября 2010

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

Предполагается, что именно тестовый клиент вызывает проблему.Могут возникнуть 2 проблемы:

  • Не закрывать прокси, следовательно, устанавливать максимальное количество подключений к серверу.
  • Не прерывать прокси, когда они находятся в состоянии сбоя.
3 голосов
/ 09 октября 2010

Диагностический инструмент, который вы ищете, называется WCF Tracing .Обычно это показывает, почему канал вышел из строя.Вы можете настроить его как на клиенте, так и на сервере и использовать SvcTraceViewer.exe для просмотра собранных трасс.

0 голосов
/ 10 октября 2010

Вы подключились к ICommunicationObject.OnFauled

...