我有许多WCF服务,这些服务是从ASP调用某个函数的。NET MVC应用程序。
- MVC应用调用Contract-Service (WCF Service)
- Contract-Service在其处理过程中调用Contract-Buy-Service (WCF)服务)
- 合同购买服务调用SAM-Utility-Service (WCF服务)
当我从Contract-Buy-Service运行我的TDD测试用例时,它工作得非常好。因为调用从Contract-Buy-Service转到SAM-Utility-Service。但是当电话从Contract-Service => Contract-Buy-Service => SAM-Utility-Service我总是得到在配置中找不到SAM-Utility-Service的端点的错误。
在contract-buy-service和contract-service中都有SAM-Utility-Service的服务引用。我已经检查了该服务是否被托管,并已启动并运行。当我尝试通过浏览器查看时,我可以获得WSDL。
谁能告诉我为什么服务调用没有经过多个层,或者我在这里做错了什么?
谢谢!
首先,我不认为Contract-Service应该需要服务引用或SAM-Utility-Service的任何知识。除非它需要直接与该服务通信以进行其他操作——在这种情况下,我建议使用另一个服务端点——否则它不应该知道Contract-Buy-Service正在做什么。这将导致服务的更紧密耦合,从而消除了面向服务的一个主要好处。
问题的原因可能有很多(WCF总是这样)。然而,我也遇到过类似的问题,这是由错误的选择、不正确的使用或事务不对齐引起的。
考虑,例如,Contract-Service和Contract-Buy-Service参与一个事务。SAM-Utility-Service也可能需要一个事务,但是需要一个新的事务。如果第二个事务没有正确参与第一个事务,那么第一个事务可能不允许它提交,或者可能不提交自己。
第一步可以是让这三个协同工作而不需要任何事务。