簡體   English   中英

通過msmqIntegrationBinding將消息發送到msmq隊列

[英]Sending message to msmq queue via msmqIntegrationBinding

所以我正在嘗試配置我的客戶端代碼以將消息發送到MSMQ隊列。 我按照這里描述的步驟進行了操作: https//msdn.microsoft.com/en-us/library/ms789008(v = vs.100).aspx?cs-save-lang = 1&ct-lang = csharp和我的客戶代碼看起來如下:

class Program
{
    static void Main(string[] args)
    {
        var binding = new MsmqIntegrationBinding("MyMessagesBinding");
        var address = new EndpointAddress(@"msmq.formatname:DIRECT = OS:.\private$\MyMessages");
        var channelFactory = new ChannelFactory<IDataRelayService>(binding, address);
        var channel = channelFactory.CreateChannel();

        while (true)
        {
            var message = new MyMessage
            {
                Content = "this is content!!!",
                Id = "random uuid"
            };
            var msmqWrapper = new MsmqMessage<MyMessage>(message)
            {
                Priority = MessagePriority.Highest
            };

            channel.PassMessage(msmqWrapper);
            Console.WriteLine("message sent");
            Console.ReadLine();
        }
    }
}

App.config中:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <system.serviceModel>
    <client>
      <endpoint name="MyResponseEndpoint"
                address="msmq.formatname:DIRECT=OS:.\private$\MyMessages"
                binding="msmqIntegrationBinding"
                bindingConfiguration="MyMessagesBinding"
                contract="Client.IDataRelayService">
      </endpoint>
    </client>
    <bindings>
      <msmqIntegrationBinding>
        <binding name="MyMessagesBinding">
          <security mode="None" />
        </binding>
      </msmqIntegrationBinding>
    </bindings>
  </system.serviceModel>
</configuration>

IDataRelayService.cs:

[ServiceContract]
public interface IDataRelayService
{
    [OperationContract(IsOneWay = true, Action = "*")]
    void PassMessage(MsmqMessage<MyMessage> message);
}

IDataRelayServiceChannel.cs:

public interface IDataRelayServiceChannel : IDataRelayService, System.ServiceModel.IClientChannel
{
}

它編譯並運行沒有問題,但是當我打開evet查看器時,沒有為MSMQ記錄任何事件。 如果我打開計算機管理工具來查看隊列,它會在我的隊列中顯示0條消息。 我在這做錯了什么?

編輯:

我為MSMQ啟用了事件跟蹤,這是事件查看器向我顯示的內容:

在此輸入圖像描述

您的問題幾乎肯定與權限相關。

運行郵件發件人的服務帳戶必須對其嘗試發送到的隊列具有以下MSMQ權限:

  • 發信息
  • 獲取屬性
  • 獲得權限

如果您的發件人與您的收件人位於不同的域,則需要將這些權限授予名為ANONYMOUS_LOGON的本地用戶。

此外,啟用MSMQ E2E事件記錄: https//technet.microsoft.com/en-us/library/cc730882(v = ws.11).aspx。 這應該告訴你發生了什么。

如果隊列的兩端都有WCF,則應使用netMsmqBinding而不是msmqIntegrationBinding。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM