У меня есть приложение, состоящее из нескольких служб 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.