首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过msmqIntegrationBinding向msmq队列发送消息

通过msmqIntegrationBinding向msmq队列发送消息
EN

Stack Overflow用户
提问于 2016-12-12 11:48:05
回答 1查看 518关注 0票数 1

因此,我试图配置我的客户端代码,以便将消息发送到MSMQ队列。我遵循了这里描述的步骤:https://msdn.microsoft.com/en-us/library/ms789008(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp和我的客户机代码如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
[ServiceContract]
public interface IDataRelayService
{
    [OperationContract(IsOneWay = true, Action = "*")]
    void PassMessage(MsmqMessage<MyMessage> message);
}

IDataRelayServiceChannel.cs:

代码语言:javascript
复制
public interface IDataRelayServiceChannel : IDataRelayService, System.ServiceModel.IClientChannel
{
}

它编译和运行没有问题,但是当我打开evet查看器时,就没有为MSMQ记录的事件。如果我打开计算机管理工具来查看队列,它会在队列中显示0条消息。我在这里做错什么了?

编辑:

我为MSMQ启用了事件跟踪,下面是事件查看器向我展示的内容:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 16:42:26

您的问题几乎肯定是与权限相关的。

消息发件人正在运行的服务帐户必须对它试图发送到的队列具有以下MSMQ权限:

  • 发送消息
  • 获取属性
  • 获得权限

如果您的发件人位于接收方的另一个域上,则需要将这些权限授予名为ANONYMOUS_LOGON的本地用户。

另外,启用MSMQ E2E事件日志记录:https://technet.microsoft.com/en-us/library/cc730882(v=ws.11).aspx。这应该能告诉你发生了什么。

如果队列两端都有WCF,则应该使用netMsmqBinding而不是msmqIntegrationBinding。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41100193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档