一:WCF
在.net平台下,有很多的分布式技术.....
1> WebService 基于Hhttp协议的Soap模式
2>Remoting 也是一种分布是架构技术,常常用于Tcp模式的二进制传输
3>MSMQ 这是一种分布式的离线技术(即:消息队列),用于业务解耦
现如今就是现如今的的大概三种分布式技术,分布式太多了,我们就需要整合下,面对三面三种需求,这时候WCF就应运而生了。
WCF可以认为是读上面这三种技术的再次封装。
二:为什么要学习WCF
WCF采用SOAP通讯协议 (SOAP消息包括信封和正文)
三:快速搭建一个WCF程序
1>ABC的概念
A表示Address 服务的地址,就像我们访问Web的时候,需要一个http地址。
B表示Binding 就是说我们Client和Service的通道,比如说我们访问web,我们使用http通道
那么WCF支持哪些通道(协议)呢?
1. BasicHttpBinding 对应WebService
2.NetTcpBinding 对应Remoting
3.NetMSMQBinding 对应 MSMQ
C表示Contract 契约
所谓契约就是我们定义的接口是什么样的,方法名是什么,采用什么参数,返回值是什么
四:创建一个WCF项目
创建一个控制台应用程序,然后再里面添加一个WCF服务,这个WCF服务的名称我们就取名:MyService,这时候项目中自动给我们生产两个文件,一个是MyService类,一个是IMyService 接口,这个接口就是我们所说的契约。
同时在App.Config文件中会自动给我们添加一系些节点
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WCFServices.MyService">
<!--如果这个address地址为空,那么默认就使用host节点下的baseAddresses节点配置的地址-->
<!--bingding我们一般选择:basicHttpBinding,netTcpBinding,netMsmqBinding-->
<!--contract表示契约,值是这个服务使用的那个接口名称-->
<endpoint address="" binding="basicHttpBinding" contract="WCFServices.IMyService">
<!-- 部署时,应删除或替换下列标识元素,以反映在其下运行部署服务的标识。删除之后,WCF 将自动推导相应标识。-->
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<!--这个地址我们在可以谁便写,只要在客户端引用服务的时候,客户端配置文件中的endpoint填写与之一样的地址就可以了(特别注意,启用这个服务的时候,一定要以管理员的身份启动)-->
<add baseAddress="http://localhost:1234/WCFServices/MyService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
启动我们的服务:运行项目(如果直接去bin目录下的Debug目录下打开WCFServices.exe文件的形式,一定记得要以管理员身份运行打开)
namespace WCFServices
{
class Program
{
static void Main(string[] args)
{
//为什么演示方便,这里我们就以控制台应用程序来作为WCF的宿主(注:WCF的宿主可以是IIS,也可以是控制台应用程序,也可以是WinForm)
System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(MyService));
host.Open();
Console.WriteLine("WCF服务启动成功!");
Console.ReadKey();
}
}
}
五:如何使用这个服务
创建一个WebClient控制台应用程序,添加服务引用,如果无法发现服务,就直接去WCF服务的App.config配置文件中去拷贝baseAddress的值http://localhost:1234/WCFServices/MyService/ 填上,然后点击“转到” 就可以了。
namespace WebClient
{
class Program
{
static void Main(string[] args)
{
WCFSR.MyServiceClient client = new WCFSR.MyServiceClient();
var msg = client.DoWork();
Console.Write(msg); //输出:Hello World
Console.ReadKey();
}
}
}