多次处理WCF MSMQ消息

时间:2011-05-25 19:37:01

标签: c# wcf msmq

我有一个通过MSMQ与之通信的WCF程序。 出于某种原因,几个消息正在被处理多次,没有明显的原因。没有错误被抛出,我已经确认应用程序进入和退出operationBehaivior而不会抛出任何错误。

例如,我将通过MSMQ发送1条消息,应用程序将收到它并成功处理它,然后由于某种原因再次重新处理它(有时多次,有时没有重新处理)

以下是定义的相关行为和合同:

[ServiceContract]
public interface IApp
{

    [OperationContract(IsOneWay = true)]
    void ProcessMessage(List<AppData> appInfo);

}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class ProcessInfo : IApp
{
    [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
    public void ProcessMessage(List<AppData> appInfo)
    {
      try
      {
           app logic
      }
      catch(Exception e)
      {
      }



    }

看起来多次处理的MSMQ消息具有中止计数&gt; 0或者被置于重试队列中,但是,我从未收到过关于为什么会发生这种情况的错误。

对于为什么会发生这种情况的任何想法都将非常感激。

1 个答案:

答案 0 :(得分:3)

您发现您的问题是超出了绑定超时,并且您询问为什么您在客户端或服务代码中没有看到任何异常。以下是对此的探索:

客户端明智,消息是单向的,并且已成功传递到队列中。从客户的角度来看,这一切都很重要。客户端永远不会看到在服务器端处理消息时出现异常。

服务方面,您没有在代码中看到异常,因为超时是在WCF运行时级别处理的。您的代码正常完成其执行(WCF不会中止正在执行的线程或任何内容),但就WCF运行时而言,它花费的时间太长,因此需要再次重试消息传递。也就是说,您肯定会在事件日志中看到错误,如果启用,则会显示指示超时发生的服务跟踪日志。