1、WCF不能单独存在,必须托管(hosting).在windows里该进程被叫做宿主进程,单个进程可以托管多个服务,而相同的服务也可以托管在多个宿主进程里。但是一个独立的进程有利于错误与安全的隔离。宿主可以IIS,也可以windows vista的windows激活程序(WAS),也可以由开发者提供的应用程序的一部分
IIS托管
在IIS下设置一个虚拟目录,并提供一个.svc文件,作用类似.asmx文件,部署方式和webservice一样
自托管
就是自己建一个应用程序来做为宿主,控制台,winform,WPF等。
uri baseAddress =new Uri(http://localhost:80000/)
ServiceHost host =new ServiceHost(typeof(myService),baseAddress);
host.Open();
//host.Close();
当然也可以注册多个地址如
Uri tcp = new Uri("http://localhost:4000");
Uri http = new Uri("net.tcp://localhost:4001");
ServiceHost host = new ServiceHost(typeof(myService),tcp,http);
也可以在配置文件里写这个基地址,不过不能和代码写的地址冲突。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfServer.ChatService">
<endpoint address="" binding="wsHttpBinding" contract="WcfServer.IChatService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://192.168.20.58:8732/WcfServer/ChatService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
WAS托管,由于windows vista 的原因,鲍尔默都说vista是他最大的失误。就不看了
绑定
服务之间的通讯方式有很多种,包括,同步请求/应答(Rqeust/Reply)消息,或者异步的"即发即弃(Fire_and_Forget)",双向(Bidirectional)消息;即时消息或者队列消息;以及持久(Druable)队列或者可变(Volatile)队列,传递消息的协议包括(HTTP 或者HTTPS)TCP,P2P(对等网)、IPC(命名管道,以及MSMQ(Microsoft Message Queue 微软消息队列),还有消息编码格式,消息安全策略,消息传递等, 如果自己组合会有成千上万的模式,而且这其中一些模式是对立的。
为了简化选项,易于管理,WCF提供了绑定,将这些特定的技术组合到一起。
一个绑定包括传输协议,消息编码,通讯模式,可靠性,安全性,事物传播以及互操作性等项目选项的集合,使得他们保持一致。
WCF定义了9种绑定标准
基本绑定(basic binding)
基本绑定能够将WCF服务公开为旧的asmx Web 服务,使得旧的客户端能够与新的服务协作。
TCP绑定
由NetTcpBinding类提供,TCP绑定使用TCP协议实现在Intranet种跨机器通讯,TCP绑定要求客户端和服务端必须都使用WCF。
对等网绑定
IPC绑定
使用命名管道在同一台机器上通讯,不能接收来自机器外部的调用。
Web服务(WS)绑定
使用HTTP或HTTPS进行传输,
WS联邦绑定
WS双向绑定
与WS绑定类似,但是支持服务器到客户端的双向通讯。只支持HTTP协议。
MSMQ绑定,
MSMQ集成绑定
绑定关系图