Одна важная вещь отметить: при использовании Internet Explorer meta X-UA-Compatible тег для переключения режимов рендеринга для IE, это должна быть первая вещь в ГОЛОВЕ:
<head> <meta http-equiv="X-UA-Compatible" content="IE=7" /> <title>Page title</title> ...etc </head>
Я не уверен, почему ваш хост службы зависает, но могу определенно подумайте о нескольких вещах, чтобы попытаться сделать его более надежным:
а) он может их успешно отправить и
б) что сообщения собираются и обрабатываются локальной службой работоспособности WCF, прослушивающей эту очередь. Это можно использовать для обнаружения некоторых возможных ошибок.
Базовый прослушиватель MSMQ WCF, вероятно, генерирует исключение еще до того, как достигнет вашего кода. Это неприятная ситуация, потому что похоже, что ничего не происходит, и, что хуже всего, ваше сообщение пропадает. Включите трассировку службы WCF в файле конфигурации службы.
Теперь, когда вы запустите свою службу, она будет отслеживать и предоставлять вам более подробную информацию. Вместо того, чтобы напрягать глаза через XML, откройте этот файл журнала с помощью MS Service Trace Viewer.
Когда у меня возникла эта проблема, я получал «System.ServiceModel.ProtocolException»:
Входящее сообщение MSMQ содержало недопустимое или неожиданное Информация .NET Message Framing в его теле. Сообщение не может быть получено. Убедитесь, что отправитель использует совместимый сервисный контракт с соответствующим SessionMode *. Мой контракт на обслуживание был изменен на атрибут SessionMode = SessionMode.Required, но клиенты не отправляли сообщения с транзакцией.
Хотя WCF добавляет несколько интересных функций в MSMQ, иногда вы достигнете своей цели так же легко и с большим контролем, если вручную закодируете обработку MSMQ.
Если вы вручную обработаете свою очередь, вы сможете точно увидеть, что происходит, и справиться с возникшими исключениями MessageQueueExceptions, например, вы сможете перехватить MessageQueueErrorCodes , такие как QueueNotFound или MachineNotFound.
К сожалению, это означает также управление очередью подозрительных сообщений, добавление транзакций к обработке, добавление периода ожидания в очередь и т. Д. Все те вещи, которые WCF прекрасно заботит за вас.
Основное преимущество использования WCF заключается в том, что затем вы можете использовать WAS для создания экземпляра веб-приложения вместо того, чтобы иметь постоянно работающую службу Windows. Если вы не пользуетесь этим преимуществом, я не буду Я действительно не вижу каких-либо преимуществ WCF - он просто абстрагируется от того, что вам нужно коснуться и увидеть.
Просто в качестве примечания; возможно, вы могли бы проверить, доступен ли сервер, когда вы помещаете сообщения в очередь? Если сервер доступен для помещения сообщений в очередь, слушатель сможет немедленно их обработать.