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 回ディスパッチされることがあります。
他にどのような詳細が必要ですか? 伝えてください!