Корректный способ разместить *стабильный* сервис окон WCF MSMQ

Одна важная вещь отметить: при использовании Internet Explorer meta X-UA-Compatible тег для переключения режимов рендеринга для IE, это должна быть первая вещь в ГОЛОВЕ:

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=7" />
  <title>Page title</title>
  ...etc
</head>
7
задан abatishchev 29 May 2012 в 11:41
поделиться

3 ответа

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

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

а) он может их успешно отправить и

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

5
ответ дан 7 December 2019 в 03:18
поделиться

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

Теперь, когда вы запустите свою службу, она будет отслеживать и предоставлять вам более подробную информацию. Вместо того, чтобы напрягать глаза через XML, откройте этот файл журнала с помощью MS Service Trace Viewer.

Когда у меня возникла эта проблема, я получал «System.ServiceModel.ProtocolException»:

Входящее сообщение MSMQ содержало недопустимое или неожиданное Информация .NET Message Framing в его теле. Сообщение не может быть получено. Убедитесь, что отправитель использует совместимый сервисный контракт с соответствующим SessionMode *. Мой контракт на обслуживание был изменен на атрибут SessionMode = SessionMode.Required, но клиенты не отправляли сообщения с транзакцией.

3
ответ дан 7 December 2019 в 03:18
поделиться

Хотя WCF добавляет несколько интересных функций в MSMQ, иногда вы достигнете своей цели так же легко и с большим контролем, если вручную закодируете обработку MSMQ.

Если вы вручную обработаете свою очередь, вы сможете точно увидеть, что происходит, и справиться с возникшими исключениями MessageQueueExceptions, например, вы сможете перехватить MessageQueueErrorCodes , такие как QueueNotFound или MachineNotFound.

К сожалению, это означает также управление очередью подозрительных сообщений, добавление транзакций к обработке, добавление периода ожидания в очередь и т. Д. Все те вещи, которые WCF прекрасно заботит за вас.

Основное преимущество использования WCF заключается в том, что затем вы можете использовать WAS для создания экземпляра веб-приложения вместо того, чтобы иметь постоянно работающую службу Windows. Если вы не пользуетесь этим преимуществом, я не буду Я действительно не вижу каких-либо преимуществ WCF - он просто абстрагируется от того, что вам нужно коснуться и увидеть.


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

1
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: