Как устранить неполадки PipeExceptions и CommunicationExceptions в WCF?

У меня есть приложение, состоящее из нескольких служб WCF, некоторые из которых реализованы в Workflow Foundation (.NET 3.5), другие - просто C #. Эти службы взаимодействуют друг с другом через netNamedPipeBinding из соображений производительности. Беда в том, что я m видеть все больше и больше исключений CommunicationExceptions и лежащих в их основе исключений PipeExceptions по мере увеличения нагрузки на систему. Забавно то, что эти транзакции, похоже, в конечном итоге завершаются. Одна из причин этого заключается в том, что у нас есть механизм повтора в рабочих процессах, но даже вызовы из простых сервисов C # выполняются успешно, хотя я вижу эти ошибки в трассировках WCF. Есть ли какой-то механизм повтора в подсистеме именованных каналов Windows или что-то в этом роде?

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

Вот некоторые из получаемых мной исключений:

PipeException: Произошла ошибка чтения из канала: канал был завершен. (109, 0x6d).

И:

PipeException: Операция не может быть завершена, потому что канал был закрыт. Это могло быть вызвано выходом приложения на другом конце канала.

в пределах TimeoutException: Соединение канала было прервано, поскольку асинхронное чтение из канала не было завершено в течение отведенного таймаута 00:02 : 00. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута.

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

I ' Я пробовал поэкспериментировать с поведением serviceThrottling в конфигурации WCF, чтобы увеличить количество экземпляров и т. д., но эти ошибки продолжают появляться. Какие-нибудь советы?

/ EDIT: Я включил и трассировку WCF, и ведение журнала сообщений. Вот где я вижу исключения PipeExceptions и CommunicationExceptions. Само приложение ошибок не показывает. Мы немного оснастили службы WCF таким образом, чтобы все исключения регистрировались с помощью log4net, и я вообще не вижу никаких ошибок в этих журналах. Кажется, все это происходит на уровне WCF.

9
задан Roy 17 September 2010 в 10:07
поделиться