Существуют ли какие-либо гарантии относительно того, когда IIS может перезапуститься при обработке односторонней операции WCF?

StackOverflow https://stackoverflow.com/questions/326382

  •  11-07-2019
  •  | 
  •  

Вопрос

Фон

Этот вопрос состоит из двух частей.

У меня есть односторонняя операция WCF, размещенная в IIS 6.Вот мое понимание того, как это работает:

_1.IIS получает запрос.

_2.IIS отправляет ответ HTTP 202 (спасибо, я обработаю его позже).

_3.IIS вызывает мою одностороннюю операцию WCF.

Теперь управление передается моей операции WCF, которая выполняет следующие действия:

_4.Сохраните информацию запроса в транзакционном, надежном хранилище.

_5.Запустите обработку запроса в базе данных OLTP.

_6.Если возникла ошибка, повторите действия, начиная с шага 5, или примите какие-либо меры по исправлению ситуации, а затем очистите данные, сохранившиеся на шаге 4.

Вопрос 1

Правильно ли я понимаю, когда IIS отправляет ответ HTTP 202?

вопрос 2

Если IIS перезагружается между шагами 2 и 4, я могу потерять информацию о запросе до того, как у меня появятся изменения для ее сохранения, но после того, как клиент подумает, что я принял сообщение.Предоставляются ли IIS какие-либо гарантии относительно того, когда он будет перезапускаться или не будет перезапускаться при наличии ожидающих запросов?


ПС:Прошу прощения за кривое форматирование.По какой-то причине уценка полностью испортила мой нумерованный список.

Это было полезно?

Решение

Я не уверен, что ваше предположение верно.

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

Если вы используете wsHttpBinding, например, «из коробки», вы увидите 2-3 обмена сообщениями, в результате которых будет получено 200 сообщений, прежде чем фактический вызов метода.это необходимо для обмена информацией о безопасности и установления контекста безопасности.

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

Помимо всего этого - я не уверен, чего вы пытаетесь достичь - о какой переработке IIS вы говорите?Я совсем не эксперт по IIS, но сомневаюсь, что он перезапустит хост, пока что-то активно выполняется;если вы имеете в виду кого-то, кто вручную ограничивает пул приложений (или IIS, или машину, если уж на то пошло), я сомневаюсь, что вы можете что-то сделать.

Если вам нужно быть уверенным, что сообщение не потеряно, единственный известный мне способ гарантировать это — использовать тот или иной надежный обмен сообщениями, который подтверждает запросы только после их сохранения в долговременном хранилище;

Другие советы

На мой взгляд, я бы посоветовал несколько вещей:

Единственный известный мне способ управления переработкой процессов в IIS — это просмотреть пул приложений, который использует ваш веб-сайт.Если вы откроете Диспетчер IIS -> Пулы приложений -> выберите свой пул, затем щелкните правой кнопкой мыши свойства, на вкладке «Переработка» появятся параметры, которые могут вам помочь.Я думаю, это не гарантирует, что вы не потеряете запросы при переработке, но установка более длительного времени снижает вероятность такого случая.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top