托管
托管 WCF服务类不能凭空存在。每个WCF服务都必须托管(Hosting) 在Windows进程中,该进程被称为宿主进程(Host Process)。单个宿主进程可以托管多个服务,而相同的服务类型也能够托管在
|
托管
WCF服务类不能凭空存在。每个WCF服务都必须托管(Hosting) 在Windows进程中,该进程被称为宿主进程(Host Process)。单个宿主进程可以托管多个服务,而相同的服务类型也能够托管在多个宿主进程中。WCF没有要求宿主进程是否同时又是客户端进程。显然,一个独立的进程有利于错误与安全的隔离。谁提供进程或是提供何种类型的进程并不重要。宿主可以由IIS提供,也可以由Windows Vista的Windows激活服务(Windows Activation Service,WAS)提供,或者开发者直接将它作为应用程序的一部分。
注意:一种特殊的托管方式称为进程内托管(In-Process Hosting),简称in-proc。服务与客户端驻留在相同的进程中。通过定义,开发者能够提供进程内托管。
IIS托管
在微软的Internet信息服务器(Internet Information Server,IIS)中托管服务,主要的优势是宿主进程可以在客户端提交第一次请求的时候自动启动,还可以借助IIS管理宿主进程的生命周期。IIS托管的主要缺点在于只能使用HTTP协议。如果是IIS 5,还要受端口限制,要求所有服务必须使用相同的端口号。
在IIS中托管服务与经典的ASMX Web服务托管相似,需要在IIS下创建虚拟目录,并提供一个.svc文件。.svc文件的功能与.asmx文件相似,主要用于识别隐藏在文件和类后面的服务代码。例1-2展示了.svc文件的语法结构。
Win98系统:c:\Windows c:\Windows\system
Winnt和Win2000系统:c:\Winntc:\Winnt\system32
Winxp系统:c:\Windows c:\Windows\system32
|
例1-2:.svc文件 <%@ ServiceHost Language= "C#" Debug = "true" CodeBehind = "~/App_Code/MyService.cs" Service = "MyService" %>
注意:我们甚至可以将服务代码注入到.svc文件中,但这样的做法并不明智。这与ASMX Web服务的要求相同。 使用IIS托管,服务的基地址必需与.svc文件的地址保持一致。
使用Visual Studio 2005
使用Visual Studio 2005,可以生成IIS托管服务的模版文件。选择File菜单的New Website菜单项,然后从New Web Site对话框中选择WCF Service。通过这种方式可以让Visual Studio 2005创建一个新的Web站点,以及服务代码和对应的.svc文件。之后,我们还可以通过Add New Item对话框添加另外的服务。
Web.Config文件
Web站点的配置文件(Web.Config)必须列出需要公开为服务的类型。类型使用类型全名,如果服务类型来自于一个没有被引用的程序集,则还要包括程序集名: |