|
与IIS托管相似,托管应用程序的配置文件(App.Config)必须列出所有希望托管和公开的服务类型: <system.serviceModel> <services> <service name = "MyNamespace.MyService"> ... </service> </services> </system.serviceModel> 此外,宿主进程必须在运行时显式地注册服务类型,同时为客户端的调用打开宿主,因此,我们才要求宿主进程必须在客户端调用到达之前运行。创建宿主的方法通常是在Main()方法中调用ServiceHost类。ServiceHost类的定义如例1-3所示。 例1-3:ServiceHost类 public interface ICommunicationObject { void Open(); void Close(); //更多成员 } public abstract class CommunicationObject : ICommunicationObject {...} public abstract class ServiceHostBase : CommunicationObject,IDisposable,... {...} public class ServiceHost : ServiceHostBase,... { public ServiceHost(Type serviceType,params Uri[] baseAddresses); //更多成员 } 创建ServiceHost对象时,需要为ServiceHost的构造函数提供服务类型,至于默认的基地址则是可选的。可以将基地址集合设置为空。如果提供了多个基地址,也可以将服务配置为使用不同的基地址。ServiceHost拥有基地址集合可以使得服务能够接收来自于多个地址和协议的调用,同时只需要使用相对的URI。注意,每个SeriviceHost实例都与特定的服务类型相关,如果宿主进程需要运行多个服务类型,则必须创建与之匹配的多个ServiceHost实例。在宿主程序中,通过调用Open()方法,可以允许调用传入;通过调用Close()方法终结宿主实例,完成进程中的调用。此时,即使宿主进程还在运行,仍然会拒绝客户端的调用。而在通常情况下,执行关闭操作会停止宿主进程。例如,在Windows窗体应用程序中托管服务: |







