• WCF学习 之旅


    WCF学习 之旅

    WCF的全称是Windows Communication Foundation,从英文名称上看,WCF就是基于Windows下一种通讯的基础架构。利用WCF能够实现基于Windows下的各种通讯技术的开发以及应用。WCF本身是.NET Framework 3.0 的组成部分之一。和WPF、CardSpace、WF同样都是他的组件,存在其中的。如果你使用的系统是VISTA,或者将来是使用的Windows Server 2008系统。就是说你的操作系统就已经支持WCF了。如果你的系统是Windows XP SP2 或者是Windows Server 2003的话,你得去微软网站上下载.NET Framework 3.0。安装以后,在应用和开发就可以使用WCF了。

    来看一下WCF能具体给我们的开发和应用带来哪些好处。或者说它具体的作用是什么?首先,它是Microsoft平台上的面向服务即SOA架构。那么它主要的作用就是用于构建分布式和可交互操作的应用程序。它最大的特点就是把以前的许多种不同的开发模型统一了起来。即统一了ASMX、.NET Remoting、Enterprise Services的开发模型。以前不同的问题我们得要使用不的开发模型来解决。这样的话它会给我们带来一个问题,作为开发人员而言,我们在解决不同的问题,就得学习不同的技术。这样的话,就给我们的学习带来了额外的成本,增加了我们学习的难度和学习方面和开销。WCF的出现,主要作用就是统一了前面所说的那几种不同的开发模型。使得我在统一的编程模型当中来使用不同的技术,来分别解决不同的应用的需求。第二点就是,在WCF当中,把配置提高到一种非常灵活的层面。如协议的选择,消息的格式,进程分配等信息都可以在配置文件中来完成。大家都知道,通过配置文件的方式来完成协议的选择,消息的格式,进程分配,给我们带的好处是让我们应用程序非常灵活。使用应用程序的可扩展性、需求的变更带来灵活的选择。并且也降低了这种分布式开发的门槛。用户通过修改配置文件就可以满足业务需求。

    WCF是面向服务的,它是构建面向服务的系统设计。简化实现SOA的方法。WCF也是松耦合,并没有限制在特定协议、编码格式、或者主机环境上。还有WCF所有的选项都是可配置的。WCF也提供了非常好的可交互性,主要体现在两个方面,一个是支持Web Service的核心标准,另一个是在可扩展性方面能够快速适用新协议和更新。WCF强调了整合性,整合了Microsoft早期期技术。如COM、Enterprise Services,MSMQ。

    WCF与其它服务的比较,如下图。

     

     在写WCF程序之前要对基本的理论知识进行了解。WCF程序的基本架构如下图:

     

     

     WCF程序与Web Service程序类似,先编写服务器端,然后引用服务的方式进行开发。

    服务
      Wcf中的服务服务具有一个或多个终结点(endpoint)。终结点相当于端口,用于通信。
      终结点主要由地址、绑定、契约三个部分组成。
        地址(Address): 在哪里(也含有传输方式信息)
        绑定(Binding) :怎么做(与地址的传输方式要匹配)
        契约(Contract):做什么(服务契约)

    服务宿主

      服务宿主是服务建好后需要启动它,此启动的平台称为服务宿主。在宿主中,处理通信是由行为(behavior)的控制点(control point)决定。

    客户端

      只需要引用Wcf服务器并调用即可。

    WCF快速入门——全自动方式编写WCF入门程序 

    本人认为编写WCF程序有三个方式:

    1、全自动方式编写
      2、半自动方式编写
      3、纯手工方式编写

    全自动方式编写WCF程序

     

      为什么称为全自动编写方式,主要是因为服务使用系统模板创建,使用工具配置服务,并用IIS作为宿主,我们只需要编写一点点的代码即可。

     

      例子的功能是通过WCF得到字符串“Hello,Wcf自动服务调用成功!”。

     

     建立步骤

     

      参照“WCF快速入门——WCF介绍”中的“WCF程序的基本架构”图,我们可以知道要建立三个项目:

        1)服务

        2)运行服务的平台,因为此例使用IIS作为宿主,所以此项目不需要建立。

        3)客户端

       注:以下程序用VS2010编写。  

    建立步骤

     

      参照“WCF快速入门——WCF介绍”中的“WCF程序的基本架构”图,我们可以知道要建立三个项目:

        1)服务

        2)运行服务的平台,因为此例使用IIS作为宿主,所以此项目不需要建立。

        3)客户端

       注:以下程序用VS2010编写。  

     

    一、建立方案    

      1、新建一个空方案WcfAuto。

      2、在空方案WcfAuto中建立二个项目,如下表。

    项目名称

    类型

    用途

    WcfAutoService

    WCF Service Application

    用于建立WCF服务

    UserClient

    Console Application

    客户端。用于调用WCF

      修改项目中的一些名称,最终此方案如下图。

    修改项目中的一些名称,最终此方案如下图。   

     

    二、编写服务,即编写WcfAutoService项目

      根据“WCF程序的基本架构图”,可以看出服务主要有地址、契约、绑定三部分组成。在建立WCF Service Application项目时,系统已帮我们建好了契约和服务类型。

      2.1、编写契约

       契约其实是一个接口修改。修改WcfAutoService项目中的IAutoService,变成下边代码。

       注:契约用ServiceContract标识,操作用OperationContract标识。

    namespace WcfAutoService
    {
        /*
         契约
         */
        [ServiceContract]
        public interface IAutoService
        {
            [OperationContract]
            string GetData();
        }
    }

     

      2.2、编写服务类型

        服务类型是契约实现。修改WcfAutoService项目中的AutoService,变成下边代码。

    namespace WcfAutoService
    {
        /*
         服务类型
         */
        public class AutoService : IAutoService
        {
            public string GetData()
            {
                return "Hello,Wcf自动服务调用成功!";
            }
        }
    }

      2.3 修改Web.Config

      将 “WcfAutoService”项目中Web.Config底部的system.serviceModel部分变成下列代码。服务配置方法请看“WCF 宿主配置文件app.config 的简单配置 说明”。

      <system.serviceModel>
        <services>
          <service behaviorConfiguration="WcfAutoService.Service1Behavior"
            name="WcfAutoService.AutoService">
            <endpoint address="" binding="wsHttpBinding" contract="WcfAutoService.IAutoService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="WcfAutoService.Service1Behavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>

     

      这样基本服务已建好。

     

    三、编写运行服务,即编写宿主

       服务编写好后要让其运行。“WCF Service Application”项目运行有两种方式,一个是通过IIS运行服务,另一种是自己建立运行服务的程序。因为全自动方式编写WCF入门程序,所以这里采用IIS来启动WCF,即用IIS作为WCF宿主。

       使用IIS运行服务方法:

        1)我们找到WcfAutoService项目的根目录,并将此目录设置成虚拟目录。

          修改虚拟目录的属性:允许匿名访问;设置默认启动文档为“AutoService.svc”。如下图。

     

     

     

        2)测试服务

          在游览器地址中输入“http://localhost/WcfAutoService/AutoService.svc”。会看到下边界面。表示WCF服务已可以运行。

        

     

     

        四、编写客户端

         4.1、添加服务引用

          在“UserClient”项目上右键->“添加服务引用(Add Service Reference)”。如下图。

     

     

      在地址中输入刚刚在IIS配置的虚拟目录中svc的路径,“http://localhost/WcfAutoService/AutoService.svc”。点“Go”,运行正常会出现下图。在Namespace中输入此服务在客户端的命名空间。 

     

     

     

      4.2、编写客户端代码

        在Program.cs中调用服务,代码如下。

    namespace UserClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (WcfAutoService.AutoServiceClient client = new WcfAutoService.AutoServiceClient())
                {
                    string result = client.GetData();
                    Console.WriteLine("Wcf调用结果是:{0}",result);
                    Console.ReadKey();
                }
            }
        }
    }

     

     

      4.3、运行程序

       将“UserClient”项目设为启动项目并运行,出现结果如下图。

     

     

      这样“全自动方式编写WCF程序”就完成了。其中有一些如“宿主”、“契约”、“终结点”等关键词语关没有作详细的说明,不过在编写完三个入门程序后在理解起来会更容易些。

  • 相关阅读:
    窗口切换快捷键
    简单排序算法
    (转)Zen Coding 让 Notepad++ 代码书写健步如飞
    (转)图解SQL的Join
    第6章 AJAX
    今天是五四青年节
    看到的php的小知识
    (转)Notepad++配合QuickText打造快速高效的文本编辑器
    一种非常好的产生"唯一"临时文件的办法
    (转)linux 目录结构及其含义
  • 原文地址:https://www.cnblogs.com/lucky_dai/p/2023347.html
Copyright © 2020-2023  润新知