Службе NetMsmqBinding WAS не удается прочитать сообщения из удаленной очереди MSMQ в рабочей группе
У нас есть служба, размещенная в IIS с использованием WAS с привязкой net.msmq. Служба читает сообщения из личной транзакционной очереди MSMQ. Мне нужно, чтобы он работал, читая из очереди, находящейся на другом компьютере службы. Я могу заставить это работать, если очередь находится на той же машине, но не, если это находится на другой машине.
Информация об окружающей среде
- Серверы работают под управлением Windows Web Server 2008 R2.
- Серверы находятся в рабочей группе, то есть они не являются частью домена.
- MSMQ был установлен без функции интеграции службы каталогов.
- Я считаю, что установлены необходимые функции Windows (активация без Http и активация Http WCF, сервер очереди сообщений, поддержка многоадресной рассылки, прокси-сервер DCOM очереди сообщений, служба активации процессов Windows, среда.NET, API-интерфейсы конфигурации)
- Я сделал следующие изменения реестра на машинах:
- NewRemoteReadServerAllowNoneSecurityClient = 1
- NewRemoteReadServerDenyWorkgroupClient = 0
- AllowNonauthenticatedRpc = 1
- DTC был включен, с сетевым доступом DTC, разрешением удаленных клиентов, разрешением входящих, разрешением исходящих, аутентификацией не требуется и включением транзакций SNA LU 6.2.
- Изменения в брандмауэре были сделаны.
Информация о конфигурации службы
- Мы используем netMsmqBinding.
- Режим безопасности транспорта для netMsmqBinding - Нет.
- Точно, Только правда
- UseActiveDirectory имеет значение false
- Прочный это правда
- Адрес очереди - net.msmq:// имя-хост-компьютера /private/EmailAsyncService
Ведение журнала WCF
- Есть предупреждение:
Не удается определить, является ли очередь транзакционной ". FormatName очереди в ошибке: DIRECT=OS: имя-хост-компьютера \private$\EmailAsyncService
- Затем возникает ошибка:
Произошла ошибка при преобразовании имени пути очереди 'the-host-computer-name\private$\EmailAsyncService' > в имя формата: Нераспознанная ошибка -1072824300 (0xc00e0014). Все операции в очереди каналов не удалось. Убедитесь, что адрес очереди действителен. MSMQ должен быть установлен с включенной интеграцией Active Directory и иметь доступ к нему.
Что я пробовал
- Я могу читать сообщения из удаленной очереди с компьютера, на котором работает служба, если я вручную создаю и использую экземпляр Message Queue.
- Я пытался разместить службу в качестве отдельного консольного приложения. Сообщения об ошибках одинаковы.
- Я попытался отключить соответствующие брандмауэры.
- Я попробовал изменения на http://msdn.microsoft.com/en-us/library/ms752246.aspx, которые относятся к запуску таких служб на компьютере, присоединенном к рабочей группе. ("и служба активации, и рабочий процесс должны запускаться с определенной учетной записью пользователя (должна быть одинаковой для обеих), и очередь должна иметь списки ACL для конкретной учетной записи пользователя... В рабочей группе служба также должна запускаться с использованием неограниченного доступа"). token. ") Я использую учетную запись пользователя в сети.
Некоторые мысли
- Я не верю, что есть проблема с брандмауэром или разрешениями.
- Несмотря на то, что для конфигурации службы UseActiveDirectory задано значение false, адрес очереди net.msmq://the-host-computer-name/private/EmailAsyncService, похоже, переводится в-host-computer-name\private$\EmailAsyncService, AFAIK - формат имени, который требует поиска через Active Directory.
1 ответ
Я немного опоздал, но поскольку у вас нет других ответов, я все равно могу помочь.
Возможно, вы захотите попробовать включить интеграцию службы каталогов, так как я считаю, что вам нужно сменить сертификаты для работы в режиме рабочей группы.
Кроме того, в книге WCF Джувала Лоуи ясно сказано, что когда вы помещаете в очередь службы, размещенные в WAS, вы должны назвать очередь точно так же, как виртуальный путь к вашему файлу svc. Так что если ваша служба на самом деле размещена в /EmailAsyncService/EmailService.svc, то это именно то, что вам нужно, чтобы назвать свою очередь (без первой косой черты).