托管(5)
如果打开或关闭宿主的操作耗时较长,可以采用异步方式调用BeginOpen()和BeginClose()方法。我们可以订阅诸如状态改变或错误发生等宿主事件,通过调用Sta
|
如果打开或关闭宿主的操作耗时较长,可以采用异步方式调用BeginOpen()和BeginClose()方法。我们可以订阅诸如状态改变或错误发生等宿主事件,通过调用State属性查询当前的宿主状态。ServiceHost类同样实现了Abort()方法。该方法提供强行退出功能,能够及时中断进程中的所有服务调用,然后关闭宿主。此时,活动的客户端会获得一个异常。
ServiceHost<T>类
ServiceHost<T>类能够改进WCF提供的ServiceHost类,它的定义如例1-5所示。
例1-5:ServiceHost<T>类 public class ServiceHost<T> : ServiceHost { public ServiceHost() : base(typeof(T)) {} public ServiceHost(params string[] baseAddresses) : base(typeof(T),Convert(baseAddresses)) {} public ServiceHost(params Uri[] baseAddresses) : base(typeof(T),baseAddresses) {} static Uri[] Convert(string[] baseAddresses) { Converter<string,Uri> convert = delegate(string address) { return new Uri(address); }; return Array.ConvertAll(baseAddresses,convert); } }
|
ServiceHost<T>简化了构造函数,它不需要传递服务类型作为构造函数的参数,还能够直接处理字符串而不是处理令人生厌的Uri值。在本书余下的内容中,对Service-Host<T>进行了扩展,增加了一些特性,提高了它的性能。
WAS托管
Windows激活服务(WAS)是一个系统服务,只适用于Windows Vista。WAS是IIS 7的一部分,但也可以独立地安装与配置。若要使用WAS托管WCF服务,必须提供一个.svc文件,这与IIS托管一样。IIS与WAS的主要区别在于WAS并不局限于使用HTTP,它支持所有可用的WCF传输协议、端口与队列。
WAS提供了大量基于自托管的强大功能,包括应用程序池、回收机制、空闲时间管理(Idle Time Management)、身份管理(Identity Management)以及隔离(Isolation);宿主进程可以根据情况选择使用这些功能。若需考虑可扩展性,就应该使用Vista服务器作为目标机器;如果只有少数客户端,则可以将Vista客户机作为服务器。
当然,自托管进程还提供了许多卓越特性,例如进程内宿主、匿名用户环境的处理,同时还为之前介绍的高级宿主特性提供了便捷地编程访问方式。
|