2009-08-04 78 views
15

所以我正在设计一个WCF服务。我对WCF没有经验,我试图决定它是应该托管在IIS中还是自定义的Windows服务。或者其他一些选项?我应该在IIS中托管我的WCF服务吗?

需要考虑的事情:

  • 它需要从启动数据库加载数据。
  • 它需要在整个请求中维护这些数据,而不是每次都加载它。
  • 它需要同时处理多个请求。
  • 它需要尽可能地配置端点。
  • 它会调用很多本地dll。

我怀疑在IIS中托管它会简化某些事情,但我不确定在这种情况下这是个好主意。

我有什么选择,他们有什么优点和缺点?

回答

16

你需要基本看三个选项:

1)在IIS6(在Windows Server 2003/2003 R2)托管:在这种情况下,你只能承载HTTP协议 - 没有别的。这本身就是一个限制,你不能使用例如netTcp用于Intranet方案。 2)在IIS7/WAS(Vista,Server 2008)中托管:这为您提供了更多支持协议的选项,首先托管环境看起来像是赢家。

3)自托管:在这种情况下,完全取决于您做任何您需要做的事来托管和运行您的服务。

如果你现在抛出选项#1(如果你只有IIS6可用,我总是使用自托管),这是对IIS7与自承载。

IIS7为您提供“按需激活”,例如你的服务代码在任何时候都不在内存中,但是一旦请求进入就会被加载和实例化。这可能是一个优点。

另一方面,在IIS7/WAS中托管您可以指定您自己的端点 - 您的端点和服务地址是您的“MyService.svc”文件所在的虚拟目录。你不能以任何方式改变形状或形式。

自托管可能看起来像很多工作 - 但它确实为您提供了最大的灵活性:您可以随意选择协议,也可以按自己喜欢的方式设置自己的寻址方案,完全控制什么时候完成。如果您需要执行一些额外的工作以托管服务,则可以引入自己的自定义ServiceHost,等等。

除非你只是随身携带WCF,否则我总是推荐并投票支持自托管 - 如果您需要随时运行WCF服务,请在Windows NT服务中运行(这是最佳解决方案适用于生产环境),如果您正在开发/调试,则可以将WCF服务完全托管在控制台应用程序中,您可以在闲暇时启动和停止。

因此,为了使长话短说:在最后,如果你真的想在发生了什么控制,我总是建议自托管。

威力变化,一旦新的“都柏林”服务器的附加组件由微软出来 - .NET 4推出后的某个时间,大概在2010年初 - 但是这仍然为时过早。

希望这会有所帮助。

Marc

+3

你真的了解你的WCF。 – Contango 2010-12-13 22:50:53

+0

@Gravitas:谢谢!我从WCF大师那里了解到:-)(Juval Lowy) – 2010-12-14 06:11:12

+0

大家好,近5年后,你能用最新版本的WCF和IIS更新你的答案吗?另外,您是否认为Windows服务回收功能与IIS相同?谢谢! – Nock 2014-06-05 01:23:04

3

我会说,没有IIS7和WAS,你不能托管任何东西,但基于HTTP的端点使用IIS。因此,您很可能希望自行承担灵活性。

至于数据方面的考虑,任何服务都可以使用状态进行编码,使得数据缓存等

多个请求将要求您使用WCF并发。你想为你服务的主机上设置的属性:

[System.ServiceModel.ServiceBehavior(UseSynchronizationContext = false, 
    InstanceContextMode = System.ServiceModel.InstanceContextMode.PerCall, 
    ConcurrencyMode = System.ServiceModel.ConcurrencyMode.Multiple)] 
public class MyService : IMyService 
{ 
} 

WCF是一个很大的野兽,我建议你看看朱瓦尔·洛的书和其他任何你能得到你的手,你不会了解它在一个天。

1

也许有点偏离主题,但它确实解决了四个问题。

如果您最终需要自行托管,并且需要尽可能“关于端点的可配置性”,那么您可能需要查看Managed Services Engine。 MSE是Microsoft Services创建的开源产品,可让您虚拟化您的服务。基本上,它是一个WCF主机,它使用来自其自己的存储库的元数据来公开服务。一些功能是:支持服务的并行版本控制,启用/禁用服务操作的能力,将操作映射到端点的能力,以及将策略应用于操作的能力。

我不知道它是否符合你的需求,但它是值得考虑看看 - 特别是如果你必须非常配置。

+0

MSE有点旧,不是吗? – 2009-08-04 17:46:14

+0

是和不是。最新版本是2009年5月,因此正在积极开发。但是,它适合于SOA路线图的地方,我不确定(可能没有任何地方,因为它是由Microsoft Services开发的)。 – 2009-08-04 22:19:12

+0

发布之间已经有2年左右的时间了,所以我现在说它有点老了。 :) – 2011-01-27 03:48:55