Вызовы MSMQ через HTTP не достигают целевой очереди - PullRequest
2 голосов
/ 28 февраля 2012

У меня есть служба WCF, которая использует связь MSMQ. Когда я запускаю службу в локальной сети, я настраиваю конечные точки службы в файлах конфигурации клиента так, чтобы они указывали на хост-компьютер, например, если конечная точка указана на хосте службыis:

<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

Я настраиваю свой клиент для отправки сообщений на эту конечную точку:

<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

Очевидно, 192.168.1.5 - это IP-адрес хост-компьютера, это работает как чудо.Я размещаю свой сервис в IIS 7, активирую прослушиватель MSMQ в IIS, даю соответствующее право доступа и т. Д. ( Почти все в статье Тома Холландера ), и я даже могу получить доступ к своему сервису через http в своем браузере, ноКогда я создаю клиентов моей службы, размещенной в IIS, и настраиваю конечные точки на клиенте App.config, естественно, я настраиваю своих клиентов так:

<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
        <identity>
            <dns value="localhost" />
        </identity>
</endpoint>

Вот где что-то идет не так.Сообщения, которые я отправляю, продолжают помещаться в очередь в исходящей очереди на клиентском компьютере: DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqService, и состояние очереди всегда: «Ожидание соединения».Я попытался установить протокол передачи очереди на SRMP, мое имя очереди совпадает с именем моей службы, как того требует IIS, и я дал соответствующие разрешения для очереди.Кто-нибудь недавно сталкивался с этой проблемой раньше?Есть идеи?Было бы здорово, если бы кто-то мог поделиться рабочим образцом MSMQ через HTTP, если бы он имел его.

Любая помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

4 голосов
/ 29 февраля 2012

Мне удалось это исправить, мои сообщения застревали в исходящей очереди на клиентском компьютере, "DIRECT = TCP: HOSTSERVERIP \ private $ \ MsmqService / MyMsmqService.svc", состояние очереди было «Ожидание подключения»и следующим переходом был общедоступный IP-адрес серверов назначения, поэтому клиент не мог подключиться к очереди назначения, даже если он мог пропинговать общедоступный IP-адрес серверов назначения. Оказалось, что порт 1801, используемый MSMQ для прослушивания входящего трафика, не былоткройте на маршрутизаторе сети, в которой находился хост-компьютер службы, после открытия порта 1801 все работает как чудо.Это настолько фундаментальная проблема, что я думаю, что многие не удосужились упомянуть об этом в своих статьях / руководствах.Надеюсь, это поможет кому-нибудь позже.

...