基本结构:n个物理盒每个承载相同WCF服务,坐在begind负载平衡器。每个盒子触及单个数据库基础架构的支持的交易 - 不问:(

所以,我的应用程序的数据访问层在我需要分布式事务的一些方法。我有哪些选择?

请注意,客户在我的系统将遗留应用程序使用基本的Web服务(basicHttpBinding的),和全新的WCF客户端(NetTcpBinding的或NetNamedPipeBinding)通信


修改1

E.g。会有一个单个呼叫到物理箱1,例如在WCF层EditEntity(...)。此调用将触发2写入数据库。第一次写入后其他客户端在我的WCF服务的第二个实例相同的实体上的第二台物理设备调用EditEntity(...)。在第二个框我怎么知道,为了这个特定主体的交易已经在起作用?

感谢。

有帮助吗?

解决方案

不知道你已经给了我们足够的去,但如果我读正确,您正在试图以确保您可以通过WCF服务支持的事务?当你的数据库不支持事务,你的WCF端点坐在后面的负载均衡?我有这正确吗?如果是这样....

由于您的数据库没有事务支持,即移动到你的WCF层。这表明粒度粗的水平在你的方法,这样你可以确保你的WCF服务充分涵盖您的交易单呼。不要在多个WCF传播事务调用,你是在自找麻烦。


更新:有可与负载均衡,以确保连接之间的持久使用策略,但不会帮助你在这里。如果你调用EditEntity()连续,并且第一个条目是发起交易,而第二项是完成交易...那么你的服务是不够的粒状。

<强>合并这两个调用一个方法,即EditEntityComplete()。

有没有,你不能创建一个方法,而不是两个理由吗?


更新#2:改写该问题 - 一个单一的方法,该方法不支持事务在数据库内执行的条目。所讨论的方法执行了一系列必须按顺序完成的步骤。的WCF方法代表机会并发争违反以适当的顺序步骤完成。

通过此基础上,假设你不需要从功能的返回数据,考虑异步队列可以登录从WCF端点的请求。然后从单个后台进程的处理队列中。


最后修订:

<强>重新考虑不改变数据存储的要求。

鉴于为多个客户的要求,需要规模,负载平衡和事务支持在数据存储中,最终建议 - 推更改数据库。了解这是一个静态的要求,但你会花费大量的精力试图实现事务支持时,很多简单的数据库平台将提供给你。试图重新建立该功能几乎没有颠倒但很多缺点的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top