Установка системы очередей сообщений (MSMQ) Installing Message Queuing (MSMQ)
В процедурах ниже показана методика установки очереди сообщений 4.0 и очереди сообщений 3.0. The following procedures show how to install Message Queuing 4.0 and Message Queuing 3.0.
Служба очереди сообщений 4,0 недоступна в Windows XP и Windows Server 2003. Message Queuing 4.0 is not available in Windows XP and Windows Server 2003.
Установка Message Queuing 4.0 в Windows Server 2008 или Windows Server 2008 R2 To install Message Queuing 4.0 on Windows Server 2008 or Windows Server 2008 R2
В диспетчер сервера щелкните компоненты. In Server Manager, click Features.
В области справа в разделе Сводка компонентов щелкните Добавить компоненты. In the right-hand pane under Features Summary, click Add Features.
В открывшемся окне разверните очередь сообщений. In the resulting window, expand Message Queuing.
Разверните узел службы очередей сообщений. Expand Message Queuing Services.
Щелкните Интеграция служб каталогов (для компьютеров, присоединенных к домену), а затем щелкните Поддержка HTTP. Click Directory Services Integration (for computers joined to a Domain), then click HTTP Support.
Нажмите кнопку Далее, а затем — установить. Click Next,then click Install.
Установка очереди сообщений 4.0 в Windows 7 или Windows Vista To install Message Queuing 4.0 on Windows 7 or Windows Vista
Откройте Панель управления. Open Control Panel.
Щелкните программы , а затем в разделе программы и компоненты щелкните Включение и отключение компонентов Windows. Click Programs and then, under Programs and Features, click Turn Windows Features on and off.
Разверните сервер очереди сообщений Microsoft (MSMQ), разверните ядро сервера очереди сообщений Microsoft (MSMQ) и затем отметьте флажками установку следующих возможностей очереди сообщений: Expand Microsoft Message Queue (MSMQ) Server, expand Microsoft Message Queue (MSMQ) Server Core, and then select the check boxes for the following Message Queuing features to install:
MSMQ Доменные службы Active Directory (для компьютеров, подключенных к домену). MSMQ Active Directory Domain Services Integration (for computers joined to a Domain).
Поддержка MSMQ HTTP. MSMQ HTTP Support.
Нажмите кнопку ОК. Click OK.
Если появится запрос на перезагрузку компьютера, нажмите кнопку ОК , чтобы завершить установку. If you are prompted to restart the computer, click OK to complete the installation.
Установка Message Queuing 3.0 в Windows XP или Windows Server 2003 To install Message Queuing 3.0 on Windows XP and Windows Server 2003
Откройте Панель управления. Open Control Panel.
Щелкните Добавить удалить программы , а затем — Добавить компоненты Windows. Click Add Remove Programs and then click Add Windows Components.
Выберите очередь сообщений и щелкните сведения. Select Message Queuing and click Details.
Если вы используете Windows Server 2003, выберите сервер приложений для доступа к очереди сообщений. If you are running Windows Server 2003, select Application Server to access Message Queuing.
Удостоверьтесь, что на странице сведений выбрана функция поддержки MSMQ HTTP. Ensure that the option MSMQ HTTP Support is selected on the details page.
Нажмите кнопку ОК , чтобы закрыть страницу сведения, а затем нажмите кнопку Далее. Click OK to exit the details page, and then click Next. Завершите установку. Complete the installation.
Если появится запрос на перезагрузку компьютера, нажмите кнопку ОК , чтобы завершить установку. If you are prompted to restart the computer, click OK to complete the installation.
Установка и управление службой очередей сообщений
Службу очередей сообщений можно устанавливать на компьютеры под управлением ОС Windows® 7 или Windows Server® 2008 R2. В Windows 7 для установки и удаления службы очередей сообщений используется компонент панели управления Программы и компоненты. В Windows Server 2008 R2 для установки и удаления службы очередей сообщений используется мастер добавления компонентов, доступный в Диспетчере сервера. Дополнительные сведения см. в разделе Установка службы очереди сообщений.
В Windows 7 для управления службой очередей сообщений используется оснастка «Управление компьютером». Служба очереди сообщений расположена в узле «Службы и приложения».
В Windows Server 2008 R2 для управления службой очередей сообщений используется оснастка «Управление компьютером» или, если установлен компонент интеграции служб каталогов очереди сообщений, оснастка «Active Directory — пользователи и компьютеры». В оснастке «Active Directory — пользователи и компьютеры» служба очередей сообщений располагается в узле объекта указанного компьютера. Кроме того, если установлен компонент интеграции служб каталогов очередей сообщений, управление некоторыми аспектами службы очередей сообщений в Active Directory возможно из оснастки «Active Directory — сайты и службы».
В следующей таблице представлены компоненты службы очереди сообщений.
Компонент (Windows 7/Windows Server 2008 R2)
Описание
Основные компоненты сервера очереди сообщений Майкрософт (MSMQ)/Службы MSMQ
Представляет собой базовую службу, используемую для отправки и получения сообщений.
Интеграция MSMQ с доменными службами Active Directory/Интеграция служб каталогов
Позволяет публиковать свойства очереди в доменных службах Active Directory, стандартную проверку подлинности и шифрование сообщений с использованием сертификатов, зарегистрированных в доменных службах Active Directory, а также маршрутизацию сообщений между сайтами Windows. Для интеграции MSMQ с Active Directory компьютер должен быть членом домена.
Примечание
Включение или отключение этого параметра требует перезагрузки ведомого компьютера.
Поддержка HTTP службой очереди сообщений/Поддержка HTTP
Данная возможность позволяет выполнять пересылку сообщений поверх протокола HTTP. Поддержка протокола HTTP службой MSMQ требует наличия на локальном компьютере служб IIS.
Триггеры MSMQ/Триггеры службы очереди сообщений
Позволяет выполнять вызов COM-компонентов или исполняемых файлов в зависимости от фильтров, установленных для входящих сообщений выбранной очереди.
DCOM-прокси службы MSMQ/Прокси-сервер очереди сообщений DCOM
Эта возможность позволяет приложениям службы очереди сообщений использовать программный интерфейс приложения (API) MSMQ COM для подключения к удаленному серверу службы очереди сообщений.
Поддержка многоадресной рассылки/Поддержка многоадресной рассылки
Разрешает поддержку многоадресной рассылки сообщений на многоадресный IP-адрес и назначение очереди многоадресного IP-адреса.
Этот компонент маршрутизирует сообщения как между различными веб-сайтами, так и в пределах одного веб-сайта.
Примечание
Компонент «Служба маршрутизации» доступен только в Windows Server 2008 R2.
Примечание
Компонент «Поддержка клиента Windows 2000» был удален из службы очереди сообщений 5.0.
Различные версии операционной системы Windows поддерживают различные возможности службы очереди сообщений. В следующей таблице перечислены компоненты, поддерживаемые каждым из выпусков Windows 7 и Windows Server 2008 R2.
Компонент (Windows 7/Windows Server 2008 R2)
Выпуск Windows 7 Начальный
Выпуск Windows 7 Домашний базовый
Выпуск Windows 7 Домашний расширенный
Выпуск Windows 7 Максимальный
Выпуск Windows 7 Профессиональный
Выпуск Windows 7 Корпоративный
Все выпуски Windows Server 2008 R2
Основные компоненты сервера очереди сообщений Майкрософт (MSMQ)/Службы MSMQ
Появляется сообщение об ошибке «служба очереди сообщений недоступна» при попытке создать частную очередь в Windows 2000
Проблемы
При установке Microsoft Windows 2000 с пакетом обновления 3 (SP3) или более поздней версии на компьютере под управлением операционной системы Windows 2000 не удается найти в окне «Управление компьютером» частную очередь. При попытке создать частную очередь может появиться следующее сообщение об ошибке:
Не удается создать « «. Ошибка: служба очереди сообщений недоступна
Примечание. заполнителем называется заполнитель для имени частной очереди, которое предоставляется при создании частной очереди.
Причина
При установке пакета обновления 3 (SP3) для Windows 2000 или более поздней версии на компьютере с операционной системой Windows 2000 код добавляется для проверки подлинности локального удаленного вызова процедур (RPC) между средой выполнения очереди сообщений и локальной службой очереди сообщений. Этот код поддерживает локальную системную учетную запись, которая также является учетной записью по умолчанию. Этот код также поддерживает учетные записи домена для контроллеров домена. Вы не можете запускать службу очереди сообщений в локальной учетной записи пользователя. При попытке запустить службу очереди сообщений в локальной учетной записи пользователя появляется сообщение об ошибке, указанное в разделе «проблема».
Решение
Чтобы устранить эту неполадку, выполните следующие действия:
Войдите в систему с учетной записью администратора.
В поле Открыть введитеServices. mscи нажмите кнопку ОК. Откроется окно «службы».
Найдите очередь сообщений. Щелкните правой кнопкой мыши пункт очередь сообщенийи выберите пункт свойства. Откроется диалоговое окно Свойства очереди сообщений (локальный компьютер) .
На вкладке Вход в систему щелкните учетная запись локальной системы.
Нажмите кнопку Применить, а затем — кнопку ОК.
Остановите службу очереди сообщений и запустите службу очереди сообщений.
Дополнительная информация
Действия по воспроизведению проблемы
Чтобы воспроизвести проблему, выполните указанные ниже действия.
На компьютере под управлением Windows 2000 с пакетом обновления 1 (SP1) установите Windows 2000 с пакетом обновления 3 (SP3) или более поздней версии.
После установки пакета обновления перезагрузите компьютер.
В поле Открыть введитеServices. mscи нажмите кнопку ОК. Откроется окно «службы».
Найдите очередь сообщений. Щелкните правой кнопкой мыши пункт очередь сообщенийи выберите пункт свойства. Откроется диалоговое окно Свойства очереди сообщений (локальный компьютер) .
На вкладке Вход в систему щелкните эту учетную запись.
В поле учетная запись введите . В поле Password (пароль) введите
. В поле Подтверждение пароля введите один и тот же пароль<> еще раз, а затем нажмите кнопку Применить.Примечание. заполнитель — это имя пользователя, введенное в поле учетная запись. Убедитесь, что на вашем компьютере есть учетная запись пользователя. >
Нажмите кнопку ОК.
Закройте окно «Службы».
Выйдите из учетной записи администратора.
В поле имя пользователя введите . В поле Password (пароль) введите
, а затем нажмите кнопку ОК , чтобы войти в систему.
Щелкните правой кнопкой мыши Мой компьютери выберите пункт Управление. Откроется окно управления компьютером.
Разверните службы и приложения, а затем — очередь сообщений.
Развертывание частных очередей. Попробуйте просмотреть сообщения или попытайтесь создать частную очередь. Появляется сообщение об ошибке, указанное в разделе «проблема».
Ссылки
Дополнительные сведения о часто задаваемых проблемах, возникающих при использовании очереди сообщений Microsoft, можно найти на веб-сайте корпорации Майкрософт по следующему адресу:
Устранение неполадок обмена сообщениями с использованием очередей Troubleshooting Queued Messaging
В этом разделе содержатся часто задаваемые вопросы и Справка по устранению неполадок при использовании очередей в Windows Communication Foundation (WCF). This section contains common questions and troubleshooting help for using queues in Windows Communication Foundation (WCF).
Часто задаваемые вопросы Common Questions
Вопрос. Я использовал WCF Beta 1 и установил исправление MSMQ. Q: I used WCF Beta 1 and I installed the MSMQ hotfix. Требуется ли удалять исправление? Do I need to remove the hotfix?
Ответ. Да. A: Yes. Это исправление больше не поддерживается. This hotfix is no longer supported. Теперь WCF работает с MSMQ без необходимости исправления. WCF now works on MSMQ without a hotfix requirement.
Вопрос. Существует две привязки для MSMQ: NetMsmqBinding и MsmqIntegrationBinding . Q: There are two bindings for MSMQ: NetMsmqBinding and MsmqIntegrationBinding. Какую необходимо использовать и когда? What should I use and when?
Ответ . Используйте, NetMsmqBinding Если вы хотите использовать MSMQ в качестве транспорта для обмена данными между двумя приложениями WCF в очереди. A: Use the NetMsmqBinding when you want to use MSMQ as a transport for queued communication between two WCF applications. Используйте, MsmqIntegrationBinding Если вы хотите использовать существующие приложения MSMQ для взаимодействия с новыми приложениями WCF. Use the MsmqIntegrationBinding when you want to use existing MSMQ applications to communicate with new WCF applications.
Вопрос. Нужно ли обновлять MSMQ для использования NetMsmqBinding MsmqIntegration привязок и? Q: Do I have to upgrade MSMQ to use the NetMsmqBinding and MsmqIntegration bindings?
Ответ. Нет. A: No. Обе привязки работают с MSMQ 3,0 в Windows XP и Windows Server 2003. Both bindings work with MSMQ 3.0 on Windows XP and Windows Server 2003. Некоторые функции привязок становятся доступными при обновлении до MSMQ 4,0 в Windows Vista. Certain features of the bindings become available when you upgrade to MSMQ 4.0 in Windows Vista.
Вопрос. Какие функции NetMsmqBinding и MsmqIntegrationBinding привязки доступны в MSMQ 4,0, но не в MSMQ 3,0? Q: What features of the NetMsmqBinding and MsmqIntegrationBinding bindings are available in MSMQ 4.0 but not in MSMQ 3.0?
Ответ . Следующие функции доступны в MSMQ 4,0, но не в MSMQ 3,0: A: The following features are available in MSMQ 4.0 but not in MSMQ 3.0:
Пользовательская очередь недоставленных сообщений поддерживается только в MSMQ 4.0. Custom dead-letter queue is supported only on MSMQ 4.0.
MSMQ 3.0 и 4.0 обрабатывают опасные сообщения по-разному. MSMQ 3.0 and 4.0 handle poison messages differently.
Удаленные чтения в транзакциях поддерживаются только MSMQ 4.0. Only MSMQ 4.0 supports remote transacted read.
Вопрос. Можно ли использовать MSMQ 3,0 на одной стороне связи с очередями и MSMQ 4,0 на другой стороне? Q: Can I use MSMQ 3.0 on one side of a queued communication and MSMQ 4.0 on the other side?
Ответ. Да. A: Yes.
Вопрос. Я хочу интегрировать существующие приложения MSMQ с новыми клиентами или серверами WCF. Q: I want to integrate existing MSMQ applications with new WCF clients or servers. Требуются ли обновления для обеих сторон инфраструктуры MSMQ? Do I need to upgrade both sides of my MSMQ infrastructure?
Ответ. Нет. A: No. Для обеих сторон обновление до MSMQ 4.0 не требуется. You do not have to upgrade to MSMQ 4.0 on either side.
Устранение неполадок Troubleshooting
Данный раздел содержит ответы на вопросы, связанные с устранением распространенных неполадок. This section contains answers to most common troubleshooting issues. Некоторые вопросы, являющиеся известными ограничениями, описаны также в заметках о выпуске. Some issues that are known limitations are also described in the release notes.
Вопрос. Я пытаюсь использовать частную очередь и получаю следующее исключение: System.InvalidOperationException : недопустимый URL-адрес. Q: I am trying to use a private queue and I get the following exception: System.InvalidOperationException : The URL is invalid. URL-адрес очереди не может содержать символ «$». The URL for the queue cannot contain the ‘$’ character. Используйте синтаксис net.msmq://machine/private/queueName, чтобы адресовать частную очередь. Use the syntax in net.msmq://machine/private/queueName to address a private queue.
Ответ . Проверьте универсальный код ресурса (URI) очереди в конфигурации и коде. A: Check the queue Uniform Resource Identifier (URI) in your configuration and code. Не используйте символ «$» в универсальном коде ресурса (URI). Do not use the «$» character in the URI. Например, чтобы устранить частную очередь с именем Ордерскуеуе, укажите универсальный код ресурса (URI) net.msmq://localhost/private/ordersQueue . For example, to address a private queue named OrdersQueue, specify the URI as net.msmq://localhost/private/ordersQueue .
Вопрос. Вызов ServiceHost.Open() в моем приложении, находящихся в очереди, вызывает следующее исключение: System.ArgumentException : базовый адрес не может содержать строку запроса URI. Q: Calling ServiceHost.Open() on my queued application throws the following exception: System.ArgumentException : A base address cannot contain a URI query string. Почему? Why?
Ответ . Проверьте URI очереди в файле конфигурации и в коде. A: Check the queue URI in your configuration file and in your code. Хотя очереди MSMQ поддерживают использование символа «?», универсальные коды ресурсов (URI) интерпретируют этот символ как начало строки запроса. While MSMQ queues support the use of the ‘?’ character, URIs interpret this character as the beginning of a string query. Чтобы избежать этого, не используйте символ «?» в именах очередей. To avoid this issue, use queue names that do not contain ‘?’ characters.
Вопрос. Моя отправка завершилась успехом, но на получателе не вызвана операция службы. Q: My send succeeded but no service operation is invoked on the receiver. Почему? Why?
Ответ . Чтобы определить ответ, обратитесь к следующему контрольному списку: A: To determine the answer, work through the following check list:
Проверьте, совместимы ли требования транзакционной очереди с заданными гарантиями. Check that the transactional queue requirements are compatible with the assurances specified. Обратите внимание на следующие принципы. Note the following principles:
Устойчивые сообщения (датаграммы и сеансы) можно отправить с «только один раз» гарантиями ( ExactlyOnce = true ) только в транзакционную очередь. You can send durable messages (datagrams and sessions) with «exactly once» assurances (ExactlyOnce = true ) only to a transactional queue.
Сеансы можно отправлять только с гарантиями доставки точно по одному разу. You can send sessions only with «exactly once» assurances.
Необходимо, чтобы в сеансе транзакция получала сообщения из транзакционной очереди. A transaction is required to receive messages in a session from a transactional queue.
Вы можете отправлять или получать временные или устойчивые сообщения (только датаграммы) без гарантии ( ExactlyOnce = false ) только в нетранзакционную очередь. You can send or receive volatile or durable messages (datagrams only) with no assurances (ExactlyOnce = false ) only to a non-transactional queue.
Проверьте очередь недоставленных писем. Check the dead-letter queue. Если в этой очереди есть сообщения, определите причину, по которой они не были доставлены. If you find the messages there, determine why they were not delivered.
Проверьте очереди исходящих сообщений на наличие проблем с подключением и адресацией. Check the outgoing queues for connectivity or addressing problems.
Вопрос. Я указал пользовательскую очередь недоставленных сообщений, но когда я запускаю приложение отправителя, я получаю исключение, что либо очередь недоставленных сообщений не найдена, либо у отправляющего приложения нет разрешения на доступ к очереди недоставленных сообщений. Q: I have specified a custom dead-letter queue, but when I start the sender application, I get an exception that either the dead-letter queue is not found, or the sending application has no permission to the dead-letter queue. Почему это происходит? Why is this happening?
Ответ . Пользовательский URI очереди недоставленных сообщений должен включать в первый сегмент «localhost» или имя компьютера, например очередь NET. msmq://ЛОКАЛХОСТ/привате/мяппдеад-Леттер. A: The custom dead-letter queue URI must include a «localhost» or the computer name in the first segment, for example, net.msmq://localhost/private/myAppdead-letter queue.
Вопрос. Нужно ли всегда определять пользовательскую очередь недоставленных сообщений или очередь недоставленных сообщений по умолчанию? Q: Is it always necessary to define a custom dead-letter queue, or is there a default dead-letter queue?
Ответ . Если в качестве гарантии используются «только один раз» ( ExactlyOnce = true ) и не указана пользовательская очередь недоставленных сообщений, по умолчанию используется транзакционная очередь недоставленных сообщений на уровне системы. A: If assurances are «exactly once» (ExactlyOnce = true ), and if you do not specify a custom dead-letter queue, the default is a system-wide transactional dead-letter queue.
Если ExactlyOnce = false параметру Assurance присвоено значение None (), то по умолчанию функция очереди недоставленных сообщений не используется. If assurances are none (ExactlyOnce = false ), then the default is no dead-letter queue functionality.
Вопрос. Моя служба создает исключение в SvcHost. Open с сообщением «EndpointListener требования не могут быть удовлетворены Листенерфактори». Q: My service throws on SvcHost.Open with a message «EndpointListener requirements cannot be met by the ListenerFactory». Почему? Why?
A. A. Проверьте контракт службы. Check your service contract. Возможно, вы забыли разместить «IsOneWay = true » во всех операциях службы. You may have forgotten to put «IsOneWay= true » on all the service operations. Очереди поддерживают только односторонние операции службы. Queues support only one-way service operations.
Вопрос. В очереди есть сообщения, но не вызвана операция службы. Q: There are messages in the queue but no service operation is invoked. В чем заключается проблема? What is the problem?
Ответ . Определение сбоя узла службы. A: Determine if your service host is faulted. Убедиться в этом можно, просмотрев трассировку или реализовав IErrorHandler . You can check by looking at the trace or implementing IErrorHandler . По умолчанию сбой узла службы происходит при обнаружении подозрительного сообщения. Service host faults, by default, if a poison message is detected.
Вопрос. В очереди есть сообщения, но служба, размещенная в очереди, не активируется. Q: There are messages in the queue but my Web-hosted queued service is not getting activated. Почему? Why?
Ответ . Наиболее распространенная причина — разрешения. A: The most common reason is permissions.
Убедитесь в том, что выполняется процесс NetMsmqActivator и удостоверению процесса NetMsmqActivator предоставлено разрешение на чтение и поиск для данной очереди. Ensure that the NetMsmqActivator process is running and the identity of the NetMsmqActivator process is given read and seek permission on the queue.
Если процесс NetMsmqActivator отслеживает очереди на удаленном компьютере, убедитесь в том, что NetMsmqActivator не выполняется с маркером ограниченного доступа. If the NetMsmqActivator is monitoring queues on a remote machine, ensure that NetMsmqActivator does not run under a restricted token. Чтобы выполнить процесс NetMsmqActivator с маркером неограниченного доступа, используется следующий код. To run the NetMsmqActivator with an unrestricted token:
Для проблем с веб-узлом, не связанными с безопасностью, см. веб-узел, в котором размещено приложение в очереди. For non-security related Web host issues refer to: Web Hosting a Queued Application.
Вопрос. Каков самый простой способ доступа к сеансам? Q: What is the easiest way to access sessions?
Ответ . Задать Автозаполнение = true для операции, которая соответствует последнему сообщению в сеансе, и задать Автозаполнение = false для всех оставшихся операций службы. A: Set AutoComplete= true on the operation that corresponds to the last message in the session, and set AutoComplete= false on all remaining service operations.
Вопрос. Почему моя служба создает исключение ProtocolException при чтении из очереди, содержащей сообщения, помещенные в очередь, и сообщения, поставленные в очередь? Q: Why does my service throw a ProtocolException when reading from a queue that contains both queued session messages and queued datagram messages?
Ответ . Существует фундаментальное различие в способе обмена сообщениями сеанса в очереди и сообщениями с датаграммами в очереди. A: There is a fundamental difference in the way queued session messages and queued datagram messages are composed. Вследствие этого, служба, ожидающая чтения сообщения сеанса из очереди не может получить сообщение датаграммы из очереди, а служба, ожидающая чтения сообщения датаграммы из очереди не может получить сообщения сеанса. Because of this, a service that is expecting to read a queued session message cannot receive a queued datagram message and a service expecting to read a queued datagram message cannot receive a session message. При попытке чтения сообщений обоих типов из одной очереди будет получено следующее исключение. Attempting to read both types of messages from the same queue throws the following exception:
Системная очередь недоставленных сообщений, а также любая пользовательская очередь недоставленных сообщений особенно чувствительна к этой проблеме, если приложение отправляет с одного компьютера как сообщения сеанса в очереди, так и сообщения датаграммы. The system dead-letter queue, as well as any custom dead-letter queue, is particularly susceptible to this issue if an application sends both queued session messages and queued datagram messages from the same computer. Если сообщение не удается отправить, оно перемещается в очередь недоставленных сообщений. If a message cannot be sent successfully, it is moved to the dead-letter queue. При этих обстоятельствах в очереди недоставленных сообщений могут быть как сообщения сеанса, так и сообщения датаграмм. Under these circumstances, it is possible to have both session and datagram messages in the dead-letter queue. При чтении из очереди во время выполнения отсутствует возможность разделения двух типов сообщений, поэтому приложения не должны отправлять сообщения сеанса в очереди и сообщения датаграмм в очереди с одного компьютера. There is no way to separate both types of messages at runtime when reading from a queue, therefore, applications should not send both queued session messages and queued datagram messages from the same computer.
Интеграция MSMQ: устранение конкретных неполадок MSMQ Integration: Specific Troubleshooting
Вопрос. При отправке сообщения или открытии узла службы появляется сообщение об ошибке, показывающее, что схема неверна. Q: When I send a message, or when I open the service host, I get an error that indicates the scheme is wrong. Почему? Why?
Ответ . При использовании привязки интеграции MSMQ необходимо использовать схему MSMQ. formatname. A: When you use the MSMQ integration binding, you must use the msmq.formatname scheme. Например, msmq.formatname:DIRECT=OS:.\private$\OrdersQueue. For example, msmq.formatname:DIRECT=OS:.\private$\OrdersQueue. Однако если задана пользовательская очередь недоставленных сообщений, необходимо использовать схему net.msmq. But when you specify the custom dead-letter queue, you must use the net.msmq scheme.
Вопрос. При использовании имени открытого или закрытого формата и открытии узла службы в Windows Vista появляется сообщение об ошибке. Q: When I use a public or private format name and open the service host on Windows Vista, I get an error. Почему? Why?
Ответ . Канал интеграции WCF в Windows Vista проверяет, можно ли открыть подочередь для основной очереди приложения для обработки подозрительных сообщений. A: The WCF integration channel on Windows Vista checks to see if a subqueue can be opened for the main application queue for handling poison messages. Имя подочереди является производным от URI MSMQ. formatname, переданного прослушивателю. The subqueue name is derived from an msmq.formatname URI passed to the listener. Имя подочереди в MSMQ может иметь только прямое имя формата. The subqueue name in MSMQ can only be a direct format name. Из-за этого возникает ошибка. So you see the error. Измените URI очереди на непосредственное имя формата. Change the queue URI to a direct format name.
Вопрос. При получении сообщения от приложения MSMQ оно находится в очереди и не считывается принимающим приложением WCF. Q: When receiving a message from an MSMQ application, the message sits in the queue and is not read by the receiving WCF application. Почему? Why?
Ответ . Проверьте, есть ли у сообщения текст. A: Check to see whether the message has a body. Если в сообщении отсутствует тело, канал интеграции MSMQ игнорирует его. If the message has no body, the MSMQ integration channel ignores the message. Реализуйте интерфейс IErrorHandler , чтобы получать уведомления об исключениях, и проверьте трассировки. Implement IErrorHandler to be notified of exceptions and check the traces.
Устранение неполадок, связанных с безопасностью Security-Related Troubleshooting
Вопрос. При запуске примера, использующего привязку по умолчанию в режиме рабочей группы, сообщения могут отправляться, но никогда не получаются получателем. Q: When I run the sample that uses a default binding in workgroup mode, messages seem to get sent but are never received by the receiver.
Ответ . По умолчанию сообщения подписываются с помощью внутреннего сертификата MSMQ, для которого требуется служба Active Directory Directory. A: By default, messages are signed using an MSMQ internal certificate that requires the Active Directory directory service. В режиме рабочей группы происходит сбой подписи сообщения, так как служба каталогов Active Directory недоступна. In workgroup mode, because Active Directory is not available, signing the message fails. Таким образом, в очереди недоставленных сообщений и причинах сбоя, например «Неправильная подпись», указывается. So the message lands in the dead-letter queue and failure cause, such as «Bad signature», is indicated.
Чтобы обойти эту проблему, можно отключить систему безопасности. The workaround is to turn off security. Это делается путем настройки Mode = None для обеспечения работы в режиме рабочей группы. This is done by setting Mode = None to make it work in workgroup mode.
Как вариант можно получить MsmqTransportSecurity из свойства Transport и присвоить ему значение Certificate, а затем задать сертификат клиента. Another workaround is to get the MsmqTransportSecurity from the Transport property and set it to Certificate, and set the client certificate.
Еще одним обходным путем является установка MSMQ с интеграцией Active Directory. Yet another workaround is to install MSMQ with Active Directory integration.
Вопрос. При отправке сообщения с привязкой по умолчанию (включена безопасность транспорта) в Active Directory в очередь я получаю сообщение «внутренний сертификат не найден». Q: When I send a message with default binding (transport security turned on) in Active Directory to a queue, I get an «internal certificate not found» message. Как устранить эту проблему? How do I fix this?
Ответ . Это означает, что сертификат в Active Directory для отправителя должен быть продлен. A: This means that the certificate in Active Directory for the sender must be renewed. Для этого откройте Панель управления, Администрирование, Управление компьютером, щелкните правой кнопкой мыши MSMQ и выберите пункт Свойства. To do so, open Control Panel, Administrative Tools, Computer Management, right-click MSMQ, and select Properties. Выберите вкладку сертификат пользователя и нажмите кнопку продлить . Select the User Certificate tab and click the Renew button.
Вопрос. Когда я отправил сообщение с помощью Certificate и указал сертификат для использования, я получаю сообщение «Недопустимый сертификат». Q: When I send a message using Certificate and specify the certificate to use, I get an «Invalid certificate» message. Как устранить эту проблему? How do I fix this?
Ответ . Нельзя использовать хранилище сертификатов локального компьютера с режимом сертификата. A: You cannot use a local machine certificate store with certificate mode. Необходимо скопировать сертификат из хранилища сертификатов компьютера в хранилище текущего пользователя с помощью оснастки сертификатов. You have to copy the certificate from the machine certificate store to the current user store using the Certificate snap-in. Чтобы получить оснастку сертификатов, выполните следующие действия. To get the Certificate snap-in:
Нажмите кнопку Пуск, выберите выполнить, введите mmc и нажмите кнопку ОК. Click Start, select Run, type mmc , and click OK.
В консоли управления (MMC) откройте меню файл и выберите Добавить или удалить оснастку. In the Microsoft Management Console, open the File menu and select Add/Remove Snap-in.
В диалоговом окне » Добавление или удаление оснастки » нажмите кнопку » Добавить «. In the Add/Remove Snap-in dialog box, click the Add button.
В диалоговом окне Добавить изолированную оснастку выберите Сертификаты и нажмите кнопку Добавить. In the Add Standalone Snap-in dialog box, select Certificates and click Add.
В диалоговом окне Оснастка » Сертификаты » выберите Моя учетная запись пользователя и нажмите кнопку Готово. In the Certificates snap-in dialog box, select My user account, and click Finish.
Затем добавьте вторую оснастку сертификатов, выполнив предыдущие действия, но на этот раз выберите учетная запись компьютера и нажмите кнопку Далее. Next, add a second Certificates snap-in using the previous steps, but this time select Computer account and click Next.
Выберите Локальный компьютер, а затем нажмите кнопку Готово. Select Local Computer and click Finish. Теперь сертификаты можно перетаскивать из хранилища сертификатов компьютера в хранилище текущего пользователя. You can now drag and drop certificates from the machine certificate store to the current user store.
Вопрос. Когда моя служба считывает данные из очереди на другом компьютере в режиме рабочей группы, я получаю исключение «доступ запрещен». Q: When my service reads from a queue on another computer in workgroup mode, I get an «access denied» exception.
Ответ . В режиме рабочей группы для удаленного приложения, чтобы получить доступ к очереди, приложение должно иметь разрешение на доступ к очереди. A: In workgroup mode, for a remote application to gain access to the queue, the application must have permission to access the queue. Добавьте анонимный вход в список управления доступом (ACL) очереди и предоставьте ему разрешение на чтение. Add «Anonymous login» to the queue’s access control list (ACL) and give it read permission.
Вопрос. Если клиент сетевой службы (или любой клиент, не имеющий учетной записи домена) отправляет сообщение в очереди, происходит сбой отправки с недопустимым сертификатом. Q: When a network service client (or any client that does not have a domain account) sends a queued message, the send fails with an invalid certificate. Как устранить эту проблему? How do I fix this?
Ответ . Проверьте конфигурацию привязки. A: Check the binding configuration. В привязке по умолчанию включена безопасность транспорта MSMQ для подписи сообщения. The default binding has MSMQ transport security turned on to sign the message. Отключите ее. Turn it off.
Вопрос. Если у меня есть очередь на компьютере а и служба WCF, считывающая сообщения из очереди на компьютере б (сценарий удаленного приема транзакций), сообщения не считываются из очереди. Q: When I have a queue on machine A, and a WCF service that reads messages from a queue on machine B (the remote transacted receive scenario), messages are not read from the queue. Сведения трассировки указывают на сбой получения с сообщением «не удается импортировать транзакцию». Tracing information indicates the receive failed with the message «Transaction cannot be imported.» Как это исправить? What can I do to fix this?
Ответ . Существует три возможных причины этого. A: There are three possible reasons for this:
В режиме домена для удаленного получения транзакций требуется доступ к сети координатора распределенных транзакций (Майкрософт) (MSDTC). If you are in domain mode, remote transacted receive requires Microsoft Distributed Transaction Coordinator (MSDTC) network access. Его можно включить с помощью компонента «Добавление и удаление компонентов«. You can enable this using Add/Remove Components.
Проверьте режим проверки подлинности для взаимодействия с диспетчером транзакций. Check the authentication mode for communicating with the transaction manager. Если вы используете режим рабочей группы, необходимо выбрать параметр «не требуется проверка подлинности». If you are in workgroup mode, «No Authentication Required» must be selected. Если вы используете режим домена, необходимо выбрать «требуется взаимная проверка подлинности». If you are in domain mode, then «Mutual Authentication Required» must be selected.
Убедитесь, что служба MSDTC находится в списке исключений в параметрах брандмауэра подключения к Интернету . Make sure that MSDTC is in the list of exceptions in the Internet Connection Firewall settings.
Убедитесь, что используется Windows Vista. Ensure that you are using Windows Vista. MSMQ в Windows Vista поддерживает удаленное чтение транзакций. MSMQ on Windows Vista supports remote transacted read. MSMQ в более ранних версиях Windows не поддерживает удаленное чтение в транзакциях. MSMQ on earlier Windows releases does not support remote transacted read.
Вопрос. Если служба считывается из очереди в качестве сетевой службы, например, на веб-узле, почему при чтении из очереди возникает исключение «доступ запрещен»? Q: When the service reading from the queue is a network service, for example, in a Web host, why do I get an access-denied exception is raised when reading from the queue?
Ответ . Доступ для чтения сетевой службы должен быть добавлен к списку ACL очереди, чтобы сетевая служба могла выполнять чтение из очереди. A: Network service read access must be added to the queue ACL to ensure that a network service can read from the queue.
Вопрос. Можно ли использовать службу активации MSMQ для активации приложений на основе сообщений в очереди на удаленном компьютере? Q: Can I use the MSMQ activation service to activate applications based on messages in a queue on a remote machine?
Ответ. Да. A: Yes. Для этого необходимо настроить службу активации MSMQ для выполнения в качестве сетевой службы, а также добавить доступ сетевой службы к очереди на удаленном компьютере. To do this, you must configure the MSMQ activation service to run as a network service, and add network service access to the queue on the remote machine.
Использование пользовательских привязок MSMQ с включенным ReceiveContext Using Custom MSMQ Bindings with ReceiveContext Enabled
При использовании настраиваемой привязки MSMQ с ReceiveContext включенной функцией обработка входящего сообщения использует поток пула потоков, так как собственный MSMQ не поддерживает завершение ввода-вывода для асинхронного ReceiveContext получения. When using a custom MSMQ binding with ReceiveContext enabled, processing an incoming message uses a thread pool thread because native MSMQ doesn’t support I/O completion for asynchronous ReceiveContext receives. Это обусловлено тем, что обработка такого сообщения использует внутренние транзакции для ReceiveContext и MSMQ не поддерживает асинхронную обработку. This is because processing such a message uses internal transactions for ReceiveContext and MSMQ doesn’t support asynchronous processing. Чтобы обойти эту ошибку, можно добавить SynchronousReceiveBehavior в конечную точку, чтобы принудительно выполнить синхронную обработку или установить значение MaxPendingReceives 1. To work around this issue, you can add a SynchronousReceiveBehavior to the endpoint to force synchronous processing or set MaxPendingReceives to 1.