WCF介绍

来源:互联网 发布:防止微信被监控软件 编辑:程序博客网 时间:2024/06/07 02:46

一: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();        }    }}


原创粉丝点击