为什么要单独保留WCF实现和ServiceHost?

时间:2014-07-03 13:36:24

标签: asp.net wcf servicehost wcf-hosting webservicehost

让WCF项目分别拥有 - WEB HOST PROJECT和Service Implementaiton项目有什么好处。

  1. 服务合同库
  2. 服务实施库
  3. 服务主机项目
  4. 我理解合同和实现保持单独将有助于SOC主体,并且如果需要实现接口,也允许用于其他应用程序。

    但是,我不明白为什么要单独保留 - 服务主机和服务实现项目。

    我通过以下链接,但不明白保持这个分开的好处。 http://www.devx.com/codemag/Article/39837(第4,5页)

    如果有任何一个指南,那么它很有帮助。

    谢谢

2 个答案:

答案 0 :(得分:3)

正如文章所说:

  

将服务与主机分离后,您可以在任何类型的主机上托管服务,并随时更改该主机。现在,主机可以是IIS应用程序,Windows激活服务或任何自托管应用程序,包括控制台应用程序,Windows窗体应用程序,Windows服务等。WCF the Manual Way…the Right Way : Page 3

测试模拟虽然很重要,但可以说适用于编程方面的大多数事情。然而,更有用的是服务分离如何帮助在生产中部署所述服务,而不是如何帮助开发人员级别的测试。与生产系统的运行寿命相比,后者仅在短时间内有用,其中操作人员可能会改变服务的托管方式。从ALM的角度来看,操作在SDLC完成后继续进行。

虽然在这里偏离主题,但可以更进一步,不仅从服务合同中解耦服务逻辑本身,而且从与WCF相关的任何东西中解耦。如Thomas Erl的书SOA Design Patterns -

中所述
  

Facade逻辑放在合同和核心服务逻辑之间。这允许核心服务逻辑保持与合同分离。 - Service Façade

  • 保持WCF实施和WCF主机进程分离可让您更改以后托管的方式
  • 高级:保持WCF实施和服务处理逻辑分离,确保后者可以自由更改而不会影响公开服务合同的用户

答案 1 :(得分:0)

除了Micky的回答,我还会给你一些部署的例子。  1.如果要在IIS中托管服务,则不需要Service Host项目,因为IIS / WAS / .NET运行时将在第一次客户端请求时为您创建服务主机。  2.如果要在Windows服务或控制台应用程序中托管服务,可以在Window服务项目或控制台应用程序项目中创建服务主机,因为只有几行代码用于创建服务主机,除非你有管理服务主机的复杂逻辑。