Назад | Перейти на главную страницу

Не удается заставить MSMQ получать сообщения через полное доменное имя через HTTP

Контекст - Server 2008 R2 с частной очередью, настройка IIS. Отправка сообщений по HTTP с других компьютеров. [MSMQ отсутствует на «веб-сайте по умолчанию». Я изменил идентификатор своего веб-сайта на 1, чтобы установить msmq (предварительно не установив его)]

Я мог бы помочь. Я прочитал все «сообщения msmq по http просто не доставляются» и много раз изучал это, но просто не могу заставить его работать.

Я МОГУ получить очередь для получения сообщений, если использую IP-адрес, а не если я использую полное доменное имя, которое разрешается в тот же IP-адрес. Мне нужно, чтобы доменное имя работало, так как мой следующий шаг - заставить SSL работать и, очевидно, мой сертификат, если для полного доменного имени!

У меня очень простое приложение, которое отправляет следующие сообщения:

Private Function SendStuff() As String

    Dim output As String = "Mesages Sent To" & Environment.NewLine

    Dim Addresses As New List(Of String)
    Addresses.Add("Direct=HTTP://46.0.0.206/msmq/Private$/test.q")
    Addresses.Add("Direct=HTTPS://46.0.0.206/msmq/Private$/test.q")
    Addresses.Add("Direct=HTTP://subdomain.domain.net/msmq/Private$/test.q")
    Addresses.Add("Direct=HTTPS://subdomain.domain.net/msmq/Private$/test.q")

    For Each address In Addresses

        Dim fullAddress As String = "FormatName:" & address

        Dim mq As New System.Messaging.MessageQueue(fullAddress)
        Dim mm As New System.Messaging.Message()


        Dim body As String = "Hello via constructor " & fullAddress

        With mm
            .Body = body
            .AcknowledgeType = Messaging.AcknowledgeTypes.None
            .UseAuthentication = False
            .TimeToReachQueue = New TimeSpan(0, 20, 0)
            .Label = address.Substring(7, 14)
        End With

        mq.Send(mm)
        output = output & Environment.NewLine & fullAddress
    Next
    Return output
End Function

На сервере в логах IIS мы получаем именно это:

2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 80 - 83.0.0.130 - 200 0 0 31 
2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 443 - 83.0.0.130 - 200 0 0 46
2014-03-07 09:04:02 46.0.0.206 POST /msmq/private$/test.q - 80 - 83.0.0.130 - 200 0 0 78

Я получаю 1 сообщение в test.q, я ожидаю 2 (как от протоколов HTTP, так и от httpS, я пока не ожидаю, но было бы неплохо :)

Полученные сообщения:

    <?xml version="1.0"?>
<string>Hello via constructor FormatName:Direct=HTTP://46.0.0.206/msmq/Private$/test.q</string>

Может ли кто-нибудь сообщить мне, на что смотреть дальше, в журнале событий серверов / принимающих компьютеров нет ничего интересного, несмотря на то, что я включаю «от начала до конца», веду журнал. Я ничего не получаю в журнале приложений и служб \ Microsoft \ Windows \ MSMQ 'В нем 0 сообщений.

ЛЮБАЯ помощь приветствуется.

Спасибо

Итак, решение было простым.

Кажется довольно очевидным, что вся документация была сделана до опции HTTP, отсюда и отсутствие только одного примера.

Вам нужно добавить перенаправление для MSMQ с FQDN.com на localhost.

Вы делаете это, добавляя XML-файл в папку: C: \ Windows \ System32 \ msmq \ Mapping

Со следующим содержанием:

<redirections xmlns="msmq-queue-redirections.xml">
  <redirection>
      <from>http://FQDN.com/msmq/private$/test.q</from>
      <to>http://localhost/msmq/private$/test.q</to> 
  </redirection>
</redirections>

Готово