В последнее время я много работаю на фронте WCF и специально хостинг в IIS (не сам хостинг).
Это только у меня, или у кого-то есть проблемы с точной настройкой значений времени ожидания. Я начну с упоминания огромного количества тайм-аутов, которые вам нужны для точной настройки.
Посмотрите на следующие значения конечной точки привязки, которые так или иначе связаны с тайм-аутом:
- closeTimeout = "00:01:00"
- openTimeout = "00:01:00"
- ReceiveTimeout = "00:10:00"
- SendTimeout = "00:01:00"
- MaxBufferSize = "999"
- maxBufferPoolSize = "524288"
- MaxReceivedMessageSize = "999"
- readerQuotas maxDepth = "32"
- readerQuotas maxStringContentLength = "8192"
- readerQuotas maxArrayLength = "16384"
- readerQuotas maxBytesPerRead = "4096"
- readerQuotas maxNameTableCharCount = "16384"
Это просто значения конфигурации конечной точки на стороне клиента, мы еще даже не начинаем, теперь, чтобы запустить службу в IIS, также необходимо настроить привязки на стороне сервера, которые предлагают тот же уровень сложности, что и сторона клиента.
Как только это будет сделано, важно также настроить IIS, иначе во время длинных вызовов к службам WCF вы закончите прерыванием основного потока.
IIS требует отключения поддержки активности, пул приложений также включает в себя широкий спектр значений тайм-аута, пул приложений, это отдельный подробный предмет. Помимо этого есть еще около 7 значений тайм-аута, которые должны быть точно настроены, иначе ожидайте, что ваши сложные вызовы WCF потерпят неудачу.
Простите, а кто-нибудь еще пахнет крысой?
Насколько я понимаю, по существу (большинство) этих значений времени ожидания существуют из-за проблем доверия. Под доверием я подразумеваю: «Мы не доверяем службам, которые делают то, что должны делать в разумные сроки». Каждый аспект надежной связи SOA не доверяется сразу, и поэтому кажется, что для обеспечения некоторой степени управляемости нам нужны огромные массивы сетей уловов (значений времени ожидания). Посмотрим правде в глаза: если мы доверяем системам для своевременного предоставления ответа, зачем нужно устанавливать значение тайм-аута?
Проблема, с которой я сталкиваюсь, заключается в том, что, честно говоря, она задом наперед, что, если 5 систем, которые у меня есть в моем приложении, в целом доверчивы и обычно дают своевременные ответы. Я разочарован тем, что мне все равно придется пройти длительный процесс определения этих границ, потому что OOB, WCF / IIS-хостинг не работает.
Я заметил, что технология WCF лицемерна, во время веб-трансляций и маркетинговых презентаций, как правило, всегда упоминается, что WCF позволяет лучше абстрагироваться от реализации, что позволяет разработчикам легче писать и развертывать, а "просто" определять конечные точки возможность сконцентрироваться на бизнес-логике, и меньше на подчеркивающей архитектуре. Я обнаружил на практике, что ничто не может быть дальше от истины. С WCF вам нужно глубоко вникнуть в детали того, как работает ваш сервис, и вам нужно много точно настроить вручную, в отличие от сервисов ASMX, где они обычно развертываются без особых хлопот и нуждаются только в некоторой тонкой настройке IIS, редко даже.
Итак, я задаю вопрос: это только у меня или у кого-то из вас одни и те же разочарования и наблюдения? Все комментарии приветствуются!