Службе NetMsmqBinding WAS не удается прочитать сообщения из удаленной очереди MSMQ в рабочей группе - PullRequest
2 голосов
/ 29 февраля 2012

У нас есть служба, размещенная в IIS с использованием WAS с привязкой net.msmq.Служба читает сообщения из личной транзакционной очереди MSMQ.Мне нужно, чтобы он работал, читая из очереди, находящейся на другом компьютере службы.Я могу заставить его работать, если очередь находится на той же машине, но не если она находится на другой машине.

Информация об окружающей среде

  • Серверы работают под управлением Windows Web Server 2008 R2.
  • Серверы находятся в рабочей группе, т. Е. Они не являются частью домена.
  • MSMQ был установлен без функции интеграции службы каталогов.
  • Я считаю, чтоустановлены необходимые функции Windows (активация без Http WCF и активация Http, сервер очереди сообщений, поддержка многоадресной рассылки, прокси DCOM очереди сообщений, служба активации процессов Windows, среда .NET, API-интерфейсы конфигурации)
  • Я сделалследующие изменения реестра на компьютерах:
    • NewRemoteReadServerAllowNoneSecurityClient = 1
    • NewRemoteReadServerDenyWorkgroupClient = 0
    • РазрешитьNonauthenticatedRpc = 1
    • включено 1022
    * 1022, с доступом к сетевому DTC, разрешить удаленных клиентов, разрешить входящий, разрешить исходящий, без аутентификацииОбязательная настройка и включение SNA LU 6.2 Все выбранные транзакции.
  • Изменения в брандмауэре.

Информация о конфигурации службы

  • Мы используем netMsmqBinding.
  • Режим безопасности транспорта для netMsmqBinding равен None.
  • ExactlyOnce равен true
  • UseActiveDirectory имеет значение false
  • Durable is true
  • Очередьадрес net.msmq: // имя-хост-компьютера / личное / EmailAsyncService

ведение журнала WCF

  • Предупреждение:

Не удается определить, является ли очередь транзакционной ".FormatName очереди в ошибке: DIRECT = OS: имя-хост-компьютера \ private $ \ EmailAsyncService

  • В этом случае возникает ошибка:

Произошла ошибка при преобразовании имени пути очереди 'имя-хост-компьютера \ private $ \ EmailAsyncService'> в имя формата: Нераспознанная ошибка -1072824300 (0xc00e0014).Все операции в очереди каналов не удалось.Убедитесь, что адрес очереди действителен.MSMQ должен быть установлен с включенной интеграцией Active Directory, и доступ к нему доступен.

Что я пробовал

  • Я могу читать сообщения из удаленной очереди с компьютераслужба включена, если я вручную создаю и использую экземпляр MessageQueue.
  • Я попытался разместить службу как отдельное консольное приложение.Сообщения об ошибках совпадают.
  • Я попытался отключить соответствующие брандмауэры.
  • Я попытался внести изменения в http://msdn.microsoft.com/en-us/library/ms752246.aspx,, которые относятся к запуску таких служб на подключенном компьютере.в рабочую группу.(«и служба активации, и рабочий процесс должны выполняться с определенной учетной записью пользователя (должна быть одинаковой для обеих сторон), и очередь должна иметь списки ACL для конкретной учетной записи пользователя ... В рабочей группе служба также должна запускаться с использованием неограниченного доступа».token. ") Учетная запись, которую я сейчас использую, - это Сетевая служба.

Некоторые мысли

  • Я не верю, что существует проблема с брандмауэром или разрешениями.
  • Несмотря на то, что в конфигурации службы для UseActiveDirectory установлено значение false, адрес очереди net.msmq: // the-host-computer-name / private / EmailAsyncService, похоже, переводится в-host-имя_компьютера \ private $ \ EmailAsyncService, AFAIK - это формат имени, который требует поиска через Active Directory.

1 Ответ

0 голосов
/ 11 апреля 2012

Я немного опоздал, но поскольку у вас нет других ответов, я все еще могу вам помочь.

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

Кроме того, в книге WCF Джувала Лоуи ясно сказано, что, когда у вас есть службы очередей, размещенные в WAS, вы должны назвать очередь точно так же, как виртуальный путь к файлу svc.Так что если ваша служба на самом деле размещена в /EmailAsyncService/EmailService.svc, то это именно то, что вам нужно, чтобы назвать свою очередь (без первой косой черты).

...