Я хочу проверить возможность отправки сообщений в очередь на удаленных клиентах, которые могут подключаться или не подключаться. Эти подключенные клиенты будут отправлять сообщения, отправленные в 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.