关于WCF类库和WCF应用程序托管的困惑

时间:2014-07-09 09:37:28

标签: c# .net web-services wcf

我有一个网站,希望使用WCF公开某些功能。

在决定我需要使用哪种类型的WCF项目之前,我想比较WCF Class libraryWCF application之间的差异。 我知道这个问题已被多次询问并多次回答,答案通常是关于每个人提供的不同主机选项,但我想尝试看看差异,所以这就是我尝试的:< / p>

第1步 - 在同一个解决方案中,我创建了一个WCF Service library项目并创建了客户端控制台应用程序项目,将控制台应用程序设置为启动项目,从中引用了服务库项目客户项目 在客户端控制台应用程序中,我可以实例化服务并可以使用服务方法。我甚至没有为客户端项目添加服务引用。

第2步 - 在同一个解决方案中,我创建了一个WCF Service application项目并创建了客户端控制台应用项目,将控制台应用程序设置为启动项目,从中引用了服务应用程序项目客户项目 在客户端控制台应用程序中,我可以实例化服务并可以使用服务方法。我甚至没有为客户端项目添加服务引用。

在编译解决方案后的两个步骤中,我能够将客户端应用程序的exe和服务dll复制到其他位置,并且仍然能够运行客户端。

基于这个小小的excercie,我对托管部分感到困惑。似乎我使用WCF类库或WCF应用程序类型我得到相同的结果。

这就像在解决方案中使用多个项目一样,你从一个引用另一个并使用这些方法,必须有一些我缺少的东西,突出了两者之间的差异,并突出了使用WCF的好处,也是在过去我记得我必须为客户端应用程序添加服务引用才能使用该服务,为什么不是这种情况呢?

由于

2 个答案:

答案 0 :(得分:1)

1)运行wcf服务应用程序允许您向单个应用程序提供通信,其中您有一个要提供访问权限的事件的单个实例。也许这是一个游戏,或没有外部状态引擎或数据存储的聊天室。这对于提供有关您可能编写的应用程序的诊断信息非常有用。我用这个为工业机器人提供外部控制,我想提供远程控制访问。

也就是说,你编写一个应用程序,它有一个功能。您希望将部分功能公开给远程应用程序。您可以通过向现有应用程序添加WCF端点来实现此目的,因此您的应用程序本身正在控制WCF托管元素,端点的生命周期等。

2)运行WCF服务是为了获得外部数据存储,或者您的服务是无状态的。翻译服务,查找服务和网页请求属于此类别。

使用服务类,你在这里说的就是这个服务,这个东西提供了一个功能。它与另一个应用程序或进程的生命周期无关,通常由IIS托管。 IIS根据进入的请求管理何时加载和运行类。这些服务没有内部持久性,依赖于外部数据存储,或者本质上是无状态的(想想邮政编码查找或计算器服务)

听起来您实际上是将项目添加为引用,而不是将它们作为服务连接到它们。也就是说,消费应用程序实际上是将服务作为程序集(在相同的应用程序/内存空间中)加载,而不是作为应用程序随后使用WCF进行通信的单独应用程序/服务。

答案 1 :(得分:1)

  1. WCF服务应用模板可用于创建在项目中创建hosting网站的WCF服务
  2. WCF服务库模板可用于创建由WCF Service Host托管的WCF服务,这些服务可以使用WCF服务测试客户端进行测试。
  3. 使用独立库(除了解耦逻辑)的最大优点是,您可以轻松地迁移您的服务,即将其托管在另一个应用程序或其他类型的应用程序中。例如,假设您使用IIS托管服务 - 您可以轻松地将服务移至独立应用程序等。