Размещение MSMQ в IIS 6 и отправка ему сообщений через WCF - PullRequest
1 голос
/ 06 октября 2011

Я хочу проверить возможность отправки сообщений в очередь на удаленных клиентах, которые могут подключаться или не подключаться. Эти подключенные клиенты будут отправлять сообщения, отправленные в msmq через Интернет, размещенный в IIS 6.

Теперь я установил MSMQ на сервере win2003, на котором размещен IIS. После этого MSMQ отображается на веб-сайте IIS по умолчанию.

Хорошо, тогда я добавил новую транзакционную частную очередь через управление компьютером-> очередь сообщений.

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

Теперь я создал клиентское приложение со следующим кодом:

     using (var contract = new HttpMsmqBridgeProxy())
     {
        var valueToSend = 2456;
        contract.TestFunction(valueToSend);
        Console.WriteLine("value sent: " + valueToSend + "\r\n");
     }

Вот файл app.config этого клиента:

 <configuration>
  <system.serviceModel>
    <client>
      <endpoint
        address="net.msmq://**.**.***.228/private/MarksTestHttpQueue"
        binding="netMsmqBinding"
        bindingConfiguration="srmpBinding"
        contract="HttpMsmqBridgeLibrary.IHttpMsmqBridgeContract">
      </endpoint>
    </client>
    <bindings>
      <netMsmqBinding>
        <binding name="srmpBinding"
                 queueTransferProtocol="Srmp">
          <security mode="None"/>
        </binding>
      </netMsmqBinding>
    </bindings>
  </system.serviceModel>
</configuration>

IP - мой общедоступный IP-адрес, который работает, я могу нормально разместить службу wcf или веб-страницу. Я немного следовал этому руководству при использовании srmpBinding.

http://msdn.microsoft.com/en-us/library/aa395217.aspx

Итак, вкратце, что происходит, когда я запускаю приложение, оно успешно работает, сообщает мне, что оно было отправлено, я захожу в очередь сообщений моего клиента и вижу, что в папке «Исходящие» появилась новая очередь:

Прямая: http://..*.228/msmq/private$/MarksTestHttpQueue

в этой очереди нет исходящих сообщений, поэтому я предполагаю, что сообщение было отправлено.

Когда я сейчас смотрю свой msmq на winserver2003, ожидающих сообщений в очереди не ожидается.

ETA: я могу отправлять сообщения в нетранзакционную очередь, используя классическое ограничение MessageQueue:

     var queue = new MessageQueue("FormatName:DIRECT=http://**.**.***.228/msmq/private$/nonTransQueue");
     System.Messaging.Message Msg;
     Msg = new System.Messaging.Message();
     Msg.Formatter = new ActiveXMessageFormatter();
     Msg.Body = "Testing";
     queue.Send(Msg);

Сообщения отображаются (после изменения файла сопоставления в каталоге system32 / msmq / mapping) просто отлично. Мне интересно, если из-за IIS6 я не смогу отправлять, используя привязку net.msmq.

1 Ответ

1 голос
/ 06 октября 2011

Вы правы в том, что ваша служба WCF, размещенная в IIS6, не сможет обрабатывать сообщения.Это связано с тем, что IIS6 не использует WAS , который создает процессы для запросов не из http.Но я думаю, что это происходит после всего, что вы делаете в рабочем процессе.Я бы ожидал

  • , что вы запустите свой клиент, отправив сообщение в удаленную очередь
  • сообщение появится в удаленной очереди
  • вашСлужба WCF не получает сообщение, поскольку оно размещено в IIS6, поэтому вы остаетесь с сообщением в удаленной очереди.

Я не верю, что IIS участвует ввсе до тех пор, пока он не будет работать в любом случае.

Простой тест для этого - самостоятельно разместить службу на сервере, например, запустить ее в консольном приложении.Он сможет принимать сообщения MSMQ так же, как это делает IIS7, и удалит это как потенциальную проблему для вашей установки.

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

...