WinVista新技术 WCF开发指南之构建服务( 四 )


public static void Main()
{
Uri baseAddress = new Uri("http://localhost:8000/");
ServiceHost serviceHost;
serviceHost = new ServiceHost(typeof(MyService),baseAddress);
serviceHost.Open();
//能够拦截调用:
Application.Run(new MyForm());
serviceHost.Close();
}
注意,你可以在调用ServiceHost.Open()之后拦截调用,因为该宿主接收在工作者线程上的所有调用 。对ServiceHost.Open()的调用将加载WCF运行时刻并且支持接收客户端调用 。该宿主能注册多个基地址,只要它们至少在传输方面存在不同:

Uri tcpBaseAddress = new Uri("net.tcp://localhost:8001/");
Uri httpBaseAddress = new Uri("http://localhost:8002/");
ServiceHost serviceHost = new ServiceHost(typeof(MyService),tcpBaseAddress,httpBaseAddress);
通过从"Add New Item"对话框中选择WCF服务,Visual Studio 2005允许你把一个WCF服务添加到任何应用程序工程 。以此方式添加的服务当然是进程中服务(相对于宿主进程来说),但是也可以由外部客户端存取 。
八. WAS宿主

Windows活动服务(WAS)是可用于Windows Vista中的一种系统服务 。WAS是IIS7的一部分,但是可以被独立地配置 。为了使用WAS来宿主通讯WCF服务,你需要提供一个.svc文件 。该WAS提供与IIS和自宿主相比更多的优点,包括空闲时间管理、标识管理、应用程序池、隔离等等,并且是选择的宿主进程(在可用的情况下) 。而且,这种自宿主的进程为进程内宿主提供独特的优点:处理未知的客户环境、依赖于TCP或IPC(当只有IIS可用时)、利用HTTP上的多个端口(当只有IIS 6可用时)以及通过编程方式存取一些高级宿主特征 。

九. 绑定

与任何给定的服务进行通讯都存在多方面的问题 。首先,存在许多可能的通讯模式:消息可能是同步请求/响应或异步式的"激活-忘记"模式(fire-and-forget);消息也可能是双向的;消息能够被立即传输或队列化操作而该队列可能是持久性的或易破坏性的 。

还存在许多可能的消息传输协议:例如HTTP(或HTTPS),TCP,P2P(端对端网络),IPC(命名管道)或MSMQ 。也存在一些可能的消息编码选项:你可以选择普通文本以支持互操作性,二进制编码以便于优化性能,或MTOM(消息传输优化机制)以便处理巨大载荷 。

也存在一些消息保护选项:你可以选择不对之进行保护,你也可以使用它们来仅提供传输级安全或提供消息级隐私和安全,并且当然,也存在很多种方式用于对客户端实现认证和授权 。消息传输在跨越中间媒体和中断连接时可能是不可靠的或可靠的端到端式,并且消息可能是以其发送的方式传输的或是以其接收方式传输的 。

通讯服务可能需要与其它服务或仅能够使用基本Web服务协议的客户端互操作,或者它们能够使用WS-*现代协议的核心(例如WS-安全和WS-原子事务) 。通讯服务可能需要与旧式的客户端通过原始的MSMQ消息进行互操作,或你可能想限制通讯服务以便仅与另一个WCF服务或客户端互操作 。

简言之,通讯存在许多方面的内容,包括大量的参数和决策点 。其中,一些选择可能是互斥的,而另一些选择可能要求必须使用另外的相应选择 。很明显,客户端和服务必须在所有这些选项上相吻合,以达到正确交流的目的 。为了简化并使其更具可管理性,WCF小组共同在绑定中提供了一个这样的通讯方面集合 。

个绑定仅仅是对于相协调的传输协议、消息编码、通讯模式、可靠性、安全性、事务传播和互操作性的预封装 。理想情况下,你能够从通讯服务代码中"提取"所有的这些繁重的任务方面并且允许它专注于实现业务逻辑 。这样做可以使你在相当不同的繁重任务方面使用相同的服务逻辑,而绑定正好使你能够实现这一目的 。

推荐阅读