2010-10-08 6 views
3

Я работаю над отправкой в ​​мою лабораторию, которая, надеюсь, поможет диагностировать какую-то странную странную странность, которую мы видим. Существует тестовое приложение, которое использует DuplexChannelFactory для подключения к нескольким службам Windows, и по некоторым причинам каналы в этом тестовом приложении, похоже, немного ошибочны. У меня есть планы по внедрению логики повторения, но было бы здорово выяснить, почему именно они ошибаются.WCF: Как диагностировать неисправные каналы?

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

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

+0

Я не думаю, что ваша информация будет достаточно. Упомяните используемый протокол (привязка конфигурации полезно), образец одной службы, способ создания клиентов, ... – Aliostad

+0

Спасибо за обновление, я вернусь к вам. – Aliostad

ответ

4

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

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

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

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

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

3

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

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

  • Не закрывать прокси, поэтому максимальное подключение к серверу невозможно.
  • Не прервать прокси, когда они находятся в состоянии сбоя.
+0

Наиболее вероятной причиной неисправного канала является исключение на стороне сервера. – Aliostad

2

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

+0

1+ Я хотел упомянуть об этом. – Aliostad

0

Вы зацепил к ICommunicationObject.OnFauled

+0

У меня есть, но для жизни я могу поклясться, что ничего не делает. Даже когда канал намеренно ошибочен на стороне сервера, на клиенте ничего не происходит. Не кажется очень полезным. Я предполагаю, что есть некоторые детали конфигурации, которые я пропускаю, чтобы заставить ее работать или что-то в этом роде. – bwerks

Смежные вопросы