[英]Guaranteed processing of data in WCF service
我有一个WCF服务,该服务处理来自SAP的成千上万条记录。 服务调用将XElement作为其主要参数,并处理XML以更新数据库中的记录。 当前的目的是使WCF服务被异步调用,并使服务调用将相同的文档发送回调用者,并带有处理的每个记录的状态。
我也在寻找对数据进行多线程处理的方法,尽管这最终可能不会给我买任何东西。
因为这可能需要一段时间,所以我担心如果WCF服务死机,重新启动等情况会发生什么。我需要知道已处理哪些记录,未处理哪些记录以及能够完成处理在剩余的记录上。
我能提出的最好的办法就是用状态更新每个节点(无论如何,我必须这样做以发送回调用方),然后将此文件保存到硬盘中。 但是保存一个可能有100,000次大的文件似乎并不可行。
在处理这些记录时,我还可以使用哪些其他策略来跟踪这些记录?
TIA!
詹姆士
我认为使用MSMQ是满足您概述的大多数需求的好方法。 如果将节点分解为消息并将它们输入到事务性队列中。
链接到MSMQ WCF的操作方法:
也许您可以首先将记录(来自XML)放入数据库中,也可以放入特殊的“要处理的记录”表中。 每行还可以通过某种方式进行标记,以使其与特定请求相关联。 处理数据库中的行。 当您处理每个节点时,请更新状态字段(对应于您在XmlElement上已更新的节点状态)。 完成后,您可以返回并更新XML(如果同时没有崩溃),也可以生成新的XML(如果无法往返转换XML-> database->,则可能会出现问题。 XML。
如果该服务终止,则检查数据库以查找尚未处理的记录并完成对其的处理应该相对简单。
或者,可以将XML文件一次写入磁盘,在数据库中保留一个仅包含“状态”字段的表(以及一个或多个键,使您可以再次在XML文件中找到相应的记录),处理记录,随时更新数据库的“状态”表。 完成后,一口气通过从“状态”表中读取状态来更新XML文件中的状态字段。
同样,如果服务终止,则应该足够简单地检查“状态”表,以查看哪些行已处理,哪些行未处理。
祝好运!
如果您的源数据库和目标数据库是SQL Server,那么您应该忘掉中间人,直接去数据库中的内置队列支持: Service Broker 。 与MSMQ相比,您可以获得许多优势:
还有其他优点:
您松散的一件事是WCF服务模型编程。 WCF确实使编写演示应用程序变得异常容易,您将无法使用它。
您是否考虑过消息传递服务器,例如Microsoft Message Queuing 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.