繁体   English   中英

客户或服务中的WCF TransactionScope

[英]WCF TransactionScope in Client or Service

可以说我需要调用多个服务,这些服务在同一事务中插入一些带有EF的记录,用于插入PersonUnit

我不确定是否应该创建一个名为AddPersonAndUnit的新操作合同并在该方法中使用TransactionScope并从客户端调用它,或者不创建任何其他方法而仅在客户端(ASP.NET MVC客户端)中使用TransactionScope ,并且调用已经存在的AddPersonAddUnit

对于单一职责并将所有业务逻辑移入服务层,我认为在服务层中定义一个额外的方法并从客户端调用它似乎是一个更好的选择,但另一方面,仅从客户端调用这些多个方法则需要较少的工作。

您如何看待良好的设计选择? 您认为处理客户的交易是否“不好”? 为此创建一个新方法是否值得?

根据您的问题,您有两个项目( ASP.NET MVCWCF ),并且您要确保PersonUnit是通过事务进行插入/更新的。

以这两个为输入


让我们对选项1进行快速分析( 在客户端代码(代理类)中使用TransactionScope

  1. 需要的努力

    • 修改服务合同类( OperationContractServiceBehavior )以支持交易
    • 装饰现有方法( OperationBehavior )支持事务
    • 修改binding配置
    • 重新配置客户端binding配置
  2. 优点(要求赔偿)

    • 需要更少的努力=>如第1点所述,我认为很难说这种方法需要更少的努力来实现,除非一切都准备就绪。
  3. 缺点

    • 由于应用程序代码( MVC )和服务代码( WCF均由您完全控制 ,因此可以确保在插入/更新PersonUnit时始终使用事务。 但是,我宁愿将其作为black-box服务,以便我可以将其公开给其他3rd客户端或将该服务提供给其他开发人员使用, 而不必担心数据不一致 (如果他们忘记/故意跳过了交易该怎么办?) 。 即使您可以强制客户端在调用Web服务时始终使用事务(通过使用TransactionFlowOption.Mandatory选项),但我认为良好的做法是仅公开最少的服务供客户端使用

    • 单一责任也是另一个问题

    • 重复的代码(每次插入“ PersonUnit您都需要一遍又一遍地复制代码)

希望能帮助到你,

对不起英语不好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM