2

C# でトランザクション MSMQ と WCF を使用する

何らかの理由で、前回メッセージが正常に処理された (未処理の例外などがない) にもかかわらず、メッセージが MSMQ から再送信されることがあります。キューに入れているメッセージは 1 つだけです。

なぜアイデアはありますか?

確かに、メッセージがディスパッチされたときにデバッグも行っていますが、特定の領域に非常に少数のブレークポイントしかなく、メッセージがシステム。

ディスパッチが重複する理由はありますか?

更新: コード:

[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 にバインドされている場合、最初のメッセージが正常に処理された場合でも、同じメッセージが 2 回ディスパッチされることがあります。

他にどのような詳細が必要ですか? 伝えてください!

4

0 に答える 0