服务控制文件web.config 或是 app.config 依赖于服务是如何被寄宿的,它们必须包含一个<system.serviceModel>节点。在这个节点下,服务,绑定,行为,客户端,诊断,扩展,寄宿环境和COM+互操作都可以被特殊设置。最低限度必须有一个<services>节点用来包含终结点,也至少有一个非基础架构的<endpoint>节点在<services>节点下面。在<endpoint>节点内,ABCs会被定义在每一个终结点上。
地址属性定义客户端将要把消息发送到终结点的URI。例如,如果一个服务使用基于HTTP协议的绑定basicHttpBinding,URI将类似于http://www.myserver.com:8080/MyService/ .如果一个地址是相对地址(非空而且不仅仅是一个路径),这个地址将重载宿主的基地址当创建服务时。当服务被宿主启动时,WCF启动监听,在这个地址上监听新到请求。在IIS 寄宿的情况下,监听很可能早就启动了,所以WCF注册到这个监听器上以便于当那个URI的请求到来时可以重定向到WCF服务。
绑定属性定义了需要连接到服务的通信细节。定义了整个信道栈,最少要包括网络适配器信道。也包括加密,压缩和其他信道。很多WCF系统自带的绑定,如BasicHttpBinding,与ASMX兼容; WSHttpBinding,实现了很多更高级的要求消息级别的安全,事务处理和其他高级特性的网络服务; NetTcpBinding,实现了与.NET Remoting和DCOM类似的快速安全通信格式。
契约属性引用由服务终结点定义的类型。如果一个MEX终结点存在服务中,WCF会检查这个类型而且在MEX终结点以元数据形式暴露出来。WCF首先从\bin 文件夹寻找类型信息,然后在本机的全局程序缓冲中寻找。如果找不到类型信息,当Add Service Reference 或者svcutil.exe 请求WSDL时服务将会向它们返回错误信息。如果MEX终结点不存在,服务将会运行很好,但是客户端不会检测到自己的ABCs.
更多服务寄宿的内容
WCF可以使你在任何操作系统进程中寄宿服务。在大多数情况下,IIS是实现性能,可管理性和安全的最合适的寄宿环境。如果你已经在你的环境中运行IIS,事实上你就已经有本地安全处理了。复杂的id通常定义明确的策略和安全程序,并已通过自动化工具的检查。小的组织经常使用建立在IIS和Windows Server 2003的隐藏安全。在其他情况下,现有的安全行为将会应用到以IIS为寄宿的WCF服务上。
但是也有一些理由去不适用IIS寄宿。你可能想使用HTTP协议。你可能想要启动和关闭事件时有明确的控制。或者你想提供一个自定义管理接口而不是使用IIS工具。如果你不想使用IIS寄宿,没问题。WCF使自我寄宿非常易于使用和扩展。自我寄宿就是开发人员实例化服务寄宿来描述一个寄宿方法的过程,而不是依赖于IIS或者Windows激活管理服务(Windows Process Activation, WAS).
最简单的寄宿服务的方式就是写一个控制台应用程序,就想列表1.1显示的那样。这种方法在生产过程中不是非常有用,因为在服务器上使用控制台窗口不是好的行为,但是作为开始来说,它去除了所有对IIS基础的依赖。主程序创建一个ServiceHost的实例,就像名字显示的,将会寄宿服务。程序调用ServiceHost 的Open方法并且继续进行。在这个例子里,除了等谁按下回车键不用再做什么,直到应用程序调用ServiceHost 的Close 方法。
在Open方法被调用以后,ServiceHost 在终结点指定的地址上监听请求。当消息到达时,ServiceHost做一系列事情。首先,根据绑定定义的信道栈,应用解密,解压缩和安全规则。然后,基于契约,反序列化收到的消息为.NET类型,创建一个对象,最后反射调用对象上合适的方法。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Make_it_easy/archive/2010/09/17/5890583.aspx