在IIS 6中托管MSMQ并通过WCF发送消息

时间:2011-10-06 00:37:36

标签: wcf iis msmq

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

现在,我在托管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

因此,简而言之,当我运行应用程序时,它会成功,告诉我它已被发送,我进入我的客户端的Message Queue,并看到一个新队列出现在Outgoing文件夹中:

直接:HTTP:// * 的0.228 / MSMQ /私人$ / MarksTestHttpQueue

此队列中没有外发消息等待,因此我认为该消息已发送。

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

ETA:我可以使用经典的MessageQueue implimintation将消息发送到非事务性队列:

     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 个答案:

答案 0 :(得分:1)

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

  • 您运行客户端,将消息推送到远程队列
  • 消息显示在远程队列中
  • 您的WCF服务接收邮件,因为它是在IIS6中托管的,因此您在远程队列中留下了一条消息。

我认为IIS完全不参与,直到无论如何都不会工作。

对此的一个简单测试是在服务器上自行托管您的服务,例如:在控制台应用程序中运行它。它将能够像IIS7一样接受MSMQ消息,并将其作为潜在问题从您的装备中移除。

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