Я работаю над проектом, использующим привязки NetTcp для общения с некоторыми службами WCF. При первом запуске мы взяли пример плохой практики из другого приложения, которое выполняло вызовы WCF, используя следующее:
EntityObject sample = new ServiceProxy().GetEntity();
Это прекрасно работало, пока мы не осознали, что WCF удерживает соединения, даже если страница aspx была отправлена клиенту (что, как я наивно полагал, очистит все соединения). В то время как соединения удерживались, что приводило к замедлению работы, ELMAH регистрировал все ошибки и отправлял нам полные трассировки стека. Чтобы решить проблемы с производительностью, мы изменили это на:
using (ServiceProxy proxy = new ServiceProxy())
{
sample = proxy.GetEntity();
}
Это сделало производительность рок сравнительно. Недостатком этого метода является то, что всякий раз, когда на прокси-сервере поступает ошибка, единственное, что может поймать ELMAH, - это сбой канала. Затем нам нужно пролистать журналы (настроенные в WCF с использованием sharedListeners), чтобы выяснить, что произошло, и если это ошибка сериализации, шансы на то, что она обнаружится, станут намного ниже, несмотря на то, что слушатели настраиваются как на клиенте, так и на сервере. Я исследовал интерфейс IErrorHandler и собираюсь добавить поддержку этого в наши сервисы, но мне было интересно, есть ли другие способы получить подробные ошибки из WCF вместо того, чтобы просто сказать, что он неисправен без реальной информации о том, почему он нарушенными. Это было бы особенно полезно, если бы он умер при сериализации объекта, который мог бы сказать нам, ПОЧЕМУ он не мог сериализоваться.