为什么处理后会再次调度MSMQ消息?

时间:2012-10-31 05:54:46

标签: c# wcf msmq

在C#

中使用Transactional MSMQ和WCF

有时由于某种原因,即使前一次消息被成功处理(即没有未处理的异常或任何内容),消息也会从MSMQ重新分配。我只有1 msg放在队列中。

任何想法为什么?

当然,我也在调度msg时进行调试,但我在某些区域只有非常少量的断点,花费不超过3秒的时间查看我需要在msg的上下文中查看的内容流入系统。

重复发送的任何想法?

更新:代码:

[ServiceContract]
[ServiceKnownType(typeof(CustomMessage))]
[ServiceKnownType(typeof(MessageA))]
[ServiceKnownType(typeof(MessageB))]
public interface IMessageHandlerService
    {
        [OperationContract(IsOneWay = true, Action = "*")]
        void ProcessMessage(MsmqMessage<CustomMessage> message);
    }

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single, ReleaseServiceInstanceOnTransactionComplete = false)]
    public sealed class MessageHandlerService : IMessageHandlerService
    {
        [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void ProcessMessage(MsmqMessage<CustomMessage> message)
        {
            ...
        }
    }

我的ABC:

<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="IncludeExceptionDetails">
          <callbackDebug includeExceptionDetailInFaults="true" />          
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="Services.Implementation.MessageHandler.MessageHandlerService">
        <endpoint address="msmq.formatname:DIRECT=OS:.\private$\msgs" binding="msmqIntegrationBinding" bindingConfiguration="MessageHandlerBinding" contract="Services.Contracts.Messages.IMessageHandlerService">
        </endpoint>
      </service>
    </services>
    <bindings>
      <msmqIntegrationBinding>
        <binding name="MessageHandlerBinding" 
                 closeTimeout="00:30:00" 
                 receiveTimeout="01:00:00" 
                 retryCycleDelay="00:00:10" 
                 receiveRetryCount="0" 
                 exactlyOnce="true" 
                 maxRetryCycles="1" 
                 receiveErrorHandling="Move">
          <security mode="None"/>
        </binding>
      </msmqIntegrationBinding>
    </bindings>
  </system.serviceModel>

我真的不明白这个问题是模糊不清的:-) 这很简单。当wcf绑定到msmq时,即使成功处理了第一条消息,有时也会调度两次相同的消息。

您还需要其他哪些细节?请告诉我们!

0 个答案:

没有答案