我们有许多不同的老式客户端服务器C#WinForm客户端应用程序,它们基本上是数据库的前端。然后是C#服务器端Windows服务,它在客户端应用程序上等待提交订单,然后对其进行处理。
服务器端服务发现是否有工作要做的方式是轮询数据库。多年来,由于各种业务规则,轮询等待订单的逻辑变得更加复杂。因此,因此,轮询轮询的proc本身即使不做任何事情,也会占用大量SQL Server资源。除此之外,还需要在提交订单后立即处理订单,这会导致性能问题,因为数据库一直在被轮询。
该设置实际上现在可以正常工作,但是负载即将通过屋顶,很明显,它将无法承受。
在一系列不同的客户端应用程序和服务器端Windows服务之间进行通信的有效方法有哪些,这些方法将比当前方法更具前瞻性。
数据库服务器是SQL Server2005。如果真的要使用最新的SQL Server,我也许可以发挥强大的作用,但我宁愿不打这场仗。
最佳答案
您可以通过多种方法来通知客户端。
您可以使用现成的解决方案(如NServiceBus)将信息从服务器发布到客户端或其他服务器。 NServiceBus使用MSMQ以一种非常容易且持久的方式将一条消息发布给多个订户。
您可以使用MSMQ或其他排队产品从服务器发布将传递到客户端的消息。
您可以在Windows服务上托管WCF服务,并使用双工通道从每个客户端连接到该服务。每次更改时,服务都会通知相应的客户,甚至所有客户。这对代码来说更复杂,但也更加灵活。您可能会向客户端发送足够的信息,使他们根本不需要轮询数据库。
您可以让服务向所有客户端广播UDP数据包,以通知它们有需要拉出的更改。您可能可以在数据包中添加足够的信息,以允许客户端决定是否需要从服务器提取数据。对于服务器和网络而言,这是非常轻巧的,但是它假定所有客户端都在同一LAN中。