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

Фон

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

У меня есть односторонняя операция 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 какие-либо гарантии относительно того, когда он будет или не будет перезагружаться при ожидании запросов?


PS: Пожалуйста, извините за хитрое форматирование. По какой-то причине уценка полностью испортила мой нумерованный список.

Ответы [ 2 ]

1 голос
/ 03 января 2009

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

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

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

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

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

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

0 голосов
/ 04 декабря 2008

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

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

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

...