【问题标题】:MSMQ + WCF, IIS7 - Messages are being journaled, but never hitting the serviceMSMQ + WCF、IIS7 - 正在记录消息,但从未触及服务
【发布时间】:2013-02-12 13:56:51
【问题描述】:

我认为是标准设置。我关注的是:http://blogs.msdn.com/b/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx 主要是,但根据需要使用其他来源。

到目前为止,发生了什么:

  1. 客户端发送消息
  2. 我在日志消息中看到相应队列的消息
  3. 似乎从未调用过服务。我有大量的日志记录可以输出关于服务调用和/或服务方法错误的日志。

我已经关闭了服务,但消息仍然出现在日志消息中 - 不知道为什么会这样。

队列:bretrace/bretraceservice.svc(匿名访问,授予全部权限)

客户端 Web.config

<netMsmqBinding>
    <binding name="MsmqBreTrace" receiveErrorHandling="Move">
        <security mode="None" />
    </binding>
</netMsmqBinding>

<endpoint address="net.msmq://wcfserver/private/bretrace/bretraceservice.svc" binding="netMsmqBinding"
    bindingConfiguration="MsmqBreTrace" name="MsmqBreTraceService"
    contract="C.BusinessRuleController.Services.BoschProxy.Trace.IQueuingTraceContract"/>

服务 Web.config

<bindings>
    <netMsmqBinding>
        <binding name="MsmqBreTraceReader" receiveErrorHandling="Move">
            <security mode="None" />
        </binding>
    </netMsmqBinding>
</bindings>
<services>
    <service name="C.BusinessRuleController.Services.QR.BreTraceService">
        <endpoint address=""
            binding="netMsmqBinding" bindingConfiguration="MsmqBreTraceReader"
            contract="C.BusinessRuleController.Services.BoschProxy.Trace.IQueuingTraceContract" />
    </service>
</services>

我还激活了 system.diagnostics,它似乎正在调用服务,在我看到的活动下:

  • “过程操作:'http://tempuri.org/IQueuingTraceContract/LogTrace'。” 我不确定 tempuri.org 是否有问题?
  • “执行 C.BusinessRuleController...”作为另一个活动。

【问题讨论】:

  • 您是否启用了端到端跟踪? technet.microsoft.com/en-us/library/cc730882.aspx
  • 我已经启用了它——但老实说,我很难对它做出正面或反面。我有 3 个事件 - 消息来自网络(事件 id 4)消息放入队列(事件 id 1)和消息接收(事件 id 2)。我看不到这在哪里显示正在接收消息的服务
  • 如果每条消息有三个事件,这通常表明一切正常。您是否考虑过使用事务队列?
  • @hugh 他们在事务队列中。我在应该接收消息的服务方法中进行了各种日志记录,但根本没有记录任何内容。
  • 服务器上的 WCF 跟踪怎么样?我唯一能想到的错误是当您收到消息时遇到某种序列化/格式问题。我还注意到您正在使用 netMsmqBinding。因此,我假设您的客户也是 WCF?

标签: wcf iis-7 msmq


【解决方案1】:

有几件事为我解决了这个问题:

首先,我必须在绑定中设置 security mode='transactional'

<netMsmqBinding>
    <binding name="MsmqBreTrace" receiveErrorHandling="Move">
        <security mode="Transactional" />
    </binding>
</netMsmqBinding>

其次,我必须安装 MSMQ Active Directory Integration - 我不必实际启用它,但即使不使用它也必须安装它。这是最让我震惊的,我不想要广告集成,所以我认为我不需要它。原来我错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2010-09-12
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2012-11-05
    相关资源
    最近更新 更多