长时间运行的WCF MSMQ处理

长时间运行的WCF MSMQ处理,wcf,netmsmqbinding,msmq-wcf,Wcf,Netmsmqbinding,Msmq Wcf,我正在阅读Juval Lowy的《WCF服务编程》第三版。在第473页的“排队服务”一章中,他提到了NetMsmqBinding,“……您应该保持服务对排队调用的处理相对较短,否则可能会中止回放事务。这里一个重要的观察结果是,将排队调用等同于长时间的异步调用是错误的。” 1) 什么是短电话?2) 长时间运行的最佳实践是什么;把他们送到线程池 这篇文章在实践中遇到了同样的问题: 我看了又看,在互联网上找不到任何关于这个问题的最佳实践 3) 如果我没有事务,这个规则适用吗?1)默认情况下,带有事务

我正在阅读Juval Lowy的《WCF服务编程》第三版。在第473页的“排队服务”一章中,他提到了NetMsmqBinding,“……您应该保持服务对排队调用的处理相对较短,否则可能会中止回放事务。这里一个重要的观察结果是,将排队调用等同于长时间的异步调用是错误的。”

1) 什么是短电话?2) 长时间运行的最佳实践是什么;把他们送到线程池

这篇文章在实践中遇到了同样的问题:

我看了又看,在互联网上找不到任何关于这个问题的最佳实践

3) 如果我没有事务,这个规则适用吗?

1)默认情况下,带有事务的短流程所需时间少于10分钟(默认事务超时) 2) 可以,但如果这样做,您将丢失事务行为(如果服务器宕机,消息将丢失) 3) 对。默认情况下,事务作用域有一个默认超时,该超时将中止事务


好消息是,您可以在machine.config文件上覆盖该超时:

感谢您的响应。我觉得你的前两个答案很有用。第三个问题是关于在没有事务的情况下工作。交易是唯一的限制因素吗?有关于这个主题的文件吗?是的。如果不使用事务处理消息,则不再存在该问题(可能您只需配置receiveTimeout,…请参阅:),但另一方面,如果发生错误或机器断电(出于某种原因)时不使用事务,则消息将丢失。在这一点上,您必须了解丢失消息的重要性。关于这个主题的文档,我在这本书中找到了一个很酷的解释:。你刚才是不是让我回到了产生这个问题的那本书?你能给我指出一个很酷的解释吗?它似乎不在我的副本中,因此也不在我的查询中。我不知道网上有任何关于它的文章。但基本上,在那本书(我有第一版)上,作者谈到了回放事务。如果未在操作中定义事务范围,则不在事务上下文中,并且不会应用事务超时。但是,如果您的操作需要一些时间才能运行,那么如果您没有在操作中定义事务范围([OperationBehavior(TransactionScopeRequired=true,TransactionAutoComplete=true)],则可能需要在绑定元素(请参阅:)上配置属性openTimeout、closeTimeout、sendTimeout和receiveTimeout回放事务将在消息到达服务时结束。因此,您将不再因事务超时而中止操作。但另一方面,如果服务中发生错误,您将丢失一条消息。如果需要任何测试帮助,请给我打电话。