2011-10-06 63 views
1

我想测试在可能连接或未连接的远程客户端上排队消息的可能性,这些客户端在连接时会将通过Internet发送到msmq的消息即托管在IIS 6中。在IIS 6中托管MSMQ并通过WCF发送邮件

现在,我在托管IIS的win server2003上设置MSMQ。在我完成这个“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

在此队列中没有等待发送的消息,因此我假设消息已发送。

当我在winserver2003上查看我的msmq时,没有到达排队等待的消息。

ETA:

 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 /映射目录映射文件后)就好了:我可以用经典的MessageQueue implimintation将消息发送到非事务性队列。我想知道是否因为它是IIS6我将无法使用net.msmq绑定发送。

+0

如果您通过HTTP发送到事务性队列,发件人需要MSMQ并在本地安装HTTP支持来接收目标发回的ACK消息。发送到非事务性队列不会。 –

回答

1

您是正确的,因为您在IIS6中托管的WCF服务将无法处理消息。这是因为IIS6不使用WAS实例化非HTTP请求的进程。但我认为这是在工作流程中所做的一切之后。我会期待

    你运行你的客户
  • ,推消息发送到远程队列
  • 出现在远程队列
  • WCF服务不皮卡的消息,因为它是在托管消息IIS6,因此您在远程队列中留下了一条消息。

我不相信IIS一直参与,直到它不会工作的地步。

这样做的一个简单的测试是要自你的主机服务器上的服务,例如在控制台应用程序中运行它。它将能够像IIS7一样接受MSMQ消息,并将从您的钻机中消除潜在的问题。

您可能还想测试是否可以将消息直接从客户端推送到服务器上的事务性队列。如果在将消息发送到其他机器上的事务队列时遇到问题,则可以检查MSDTC日志。我不羡慕必须钻研那里。