我会建议一个不同的方法来建议这里的。如果您能够,我会考虑引入消息框架,如。它满足您开箱即用的许多要求。让我试着根据你的要求来解决这个问题。
该服务将由客户以单向方式调用。
NServiceBus中端点之间的所有通信都是单向的。NServiceBus使用的底层传输是MSMQ,与您的WCF方法非常相似,您的客户端正在与队列进行通信,而不是与特定的服务端点进行通信。
这些请求消息应该存储在SQL Server数据库中,并且Windows服务将消息排队。
如果你想存储在数据库中的请求消息,那么你可以配置NServiceBus发送到您的请求处理端点的所有邮件转发到其他“审计”的队列,你可以用它来坚持到数据库中。这有助于将您的应用程序逻辑从审计实施中分离出来。
请求处理的时间是可配置的。
NServiceBus允许您推迟何时发送消息。通常情况下,消息通过总线实例的发送方法发送 - Bus.Send(msg)。您可以使用The Defer方法在未来某个时间发送消息,例如。 Bus.Defer(DateTime.Now.AddDays(1),msg);没有什么是你必须做的,NserviceBus将在达到指定时间后处理消息。
如果在处理消息时发生错误,则需要重试100次,如果仍然失败,则需要终止。
默认情况下,只要消息离开队列,NServiceBus就会将消息记录在事务中。这可确保在发生故障时将消息回滚到始发队列。在这种情况下,NServiceBus会自动尝试重新处理消息一个可配置的次数。默认值是5.您当然可以将其设置为任何您想要的值,但我不确定为什么要将其设置为100.无论如何,NServiceBus使用此设置可以停止无限循环的自动重试。一旦达到限制,邮件将被发送到它所在的错误队列,直到您解决导致该异常的任何问题,或者直到您决定将邮件推送回队列进行处理。无论哪种方式,您都可以放心,信息永远不会丢失。
此外,还应该有一种机制来监控一天中进行的交易次数和失败次数。
使用MSMQ作为传输的美妙之处在于可以在基础设施级别实现性能监视。您的应用程序的表现如何,可以通过他们坐在队列中的时间来衡量。 NServiceBus附带性能监视器,用于跟踪消息在队列中的时间长度,还可以添加内置在窗口中的perf mons以跟踪其他活动。要监视错误,您只需检查错误队列中的消息数量。
NServiceBus的一个主要特点是可靠性。 WCF只会为你做很多事情,然后你自己做。这是很多代码,复杂性和坦率的极大错误倾向。我在这里描述的东西都是NServiceBus的所有标准功能,我几乎没有用它可以完成的所有其他事情来刻划表面。我建议你检查一下。
很难理解你想要做什么。你的客户正在调用一个服务,但也将请求放入SQL中?这没有多大意义。这些请求肯定会被服务使用。 – 2012-03-14 13:32:52
嘿Lijo它更好地使用SQL“Servive Broker”,它能够很好地满足你的需求。我使用“ServiceBroker”.http://msdn.microsoft解决了类似的情况。com/en-us/library/ms166043(v = sql.90).aspx – sandeep 2012-04-11 10:45:20