WCF介绍

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值