我有一个使用MSMQ绑定的单向WCF服务,它使用IIS 7.0中的Windows激活服务激活.
我是NInject的忠实粉丝,所以我一直在使用NCF的NInject扩展,这对于典型的HTTP WCF服务来说效果会很好.
但是,在WAS激活服务中没有HTTP管道,因此在绑定我的类型时我不能使用InRequestScope,因为System.Web.HttpContext.Current为null.我在努力寻找替代方案时使用WAS会给我我想要的东西.AspCompatibility模式属性也不适用于此模式.
我认为InThreadScope可能会工作,但服务是在一个单独的线程中创建的,而不是它执行的.
所以基本上我需要相当于WCF + WAS的HttpContext来在请求级别范围我的对象.在这个世界上是否存在一些静态对象可以以相同的方式工作,或者其他任何人对我可以破解的东西有任何想法?
我正在运行通过 MsmqBinding 调用 WCF 服务的 WCF 客户端。框架是 .Net 4.0,客户端和服务器运行在 Windows Server 2008 R2 上。通道队列是事务性的。
该服务使用以下绑定参数托管:
receiveErrorHandling="Move"
receiveRetryCount="3"
retryCycleDelay="00:00:20"
maxRetryCycles="5"
鉴于 ((ReceiveRetryCount+1) * (MaxRetryCycles + 1)) 有效,这将导致任何给定消息在移动到毒子队列之前进行 4*6 = 24 次重试。
将 IErrorHandler 附加到我的服务,我注意到在 wcf 子系统最终将消息移动到 ;poison 子队列之前,总共使用 MsmqPoisonMessageException 调用了 HandleError 6 次(对于有害消息)。
我想记录消息重试完成并将消息移至毒害队列的准确时间。在我看来,唯一的选择是计算某个消息出错的次数,并将此计数与绑定 MaxRetryCycles 进行比较。这很尴尬而且容易出错。
我的问题是:
我的参考资料是:http : //msdn.microsoft.com/en-us/library/aa395218.aspx
和:http : //consultingblogs.emc.com/simonevans/archive/2007/09/17/A-comprehensive-guide-to-using-MsmqIntegrationBinding-with-MSMQ-3.0-in-WCF.aspx