这次我们讨论Host a WCF service.
前述
为了让client可以使用service,我们必须host service到一个每时每刻都在运行的环境中(我们叫Host Application),因为它时刻等待着来自client的request(请求). Host有人翻译成"寄宿",我仍使用Host. Host application负责start和endservice, 然后监听来自client的request,解析client的request,然后调用相应的service. 最后把结果返回给client.
Host Application为每一个Service 创建一个ServiceHost对象. 当有多个Service是,就会创建多个ServiceHost对象. 当client需要使用多种protocol(通信协议),如Http和tcp,此时你不必创建多个service, 因为前面我们知道一个Service可以有多个endpoint(endpoint 包含Address,Binding,Contract). Binding指定不同的protocol,所以,我们只需创建多个endpoint,在binding中指定不同的protocol即可.
可以把service host到以下环境中:
1.IIS:我们需要创建一个Web Site,使用该Website去host wcf,然后将该website放到IIS中. 如果你使用了IIS去host wcf,那么只能使用http protocol. 当有request到来时,host application可以自动激活,并开始监听.
2.WAS:(Windows Process Activation Service)作为IIS7.0的一个新特性.我们同样需要创建一个web site .Vista,Windows 7, Windows Server2008 等操作系统可以安装WAS. 如果你使用了WAS去host wcf,可以使用http ,tcp,MSMQ,Named Pipe protocol. 当有request到来时,host application可以自动激活,并开始监听.
3.Managed Application(托管程序,如Console,WinFrom,WPF): Self-Hosting. 当有request到来时,host application不能自动激活.需要在代码中手动new出serviceHost对象.
我们如何选择哪一种host方式呢?
答案是:取决于你的操作系统,和通信需求,和特定场景.
1.如果你的操作系统是windows server2003,并且程序只用http即可满足需求. 那么使用IIS去host. 如果程序除了使用http不可满足需求(除了http,还需要tcp),则要创建window 服务去host.
2.如果你的操作系统是windows server2008(或 windows 7 )使用WAS. 因为它可以支持更多的protocol.
3.如果仅仅用于演示,可以使用Console去host. 但是release到真正的产品时,最好用winForm或WPF.
对于每一种方式,我们如何实现呢?
未完,待续....