WCF初识笔记

  此篇文章部分是从大佬http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html这里复制来的,首先使大家对wcf有一个初步的印象,然后根据具体内容,进行深入分析。

 

一、概述

 

  Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。由 .NET Framework 3.0 开始引入。

 

  WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。

 

  WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。

 

  WCF专门用于面向服务开发。

 

二、基于Asp.net 的应用程序开发与面向服务开发

 

wcf

 

  在基于Asp.net 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。我们再看下面的图:

 

wcf

 

  客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..

    

 

     三、wcf寄宿

     wcf程序需要寄宿到其他应用程序上运行。比如,我有一个控制台程序,我的wcf服务寄宿在这个控制台程序上,当我的控制台程序未启动时,我的WCF服务是无法启动的。当我控制台程序处于运行状态时,我的WCF服务才能运行。wcf的寄宿方式有很多种,

比如寄宿到IIS,寄宿到WINDOWS服务,寄宿到控制台程序等等。不过这些寄宿的方式和原理基本是一致的,可能IIS寄宿稍微有点不同,但大体是一致的,后续会跟大家详细讲解

   

     四、寄宿于IIS的简单WCF服务

        首先创建一个wcf应用程序。

                                                                     

 

         我们看到这里生成了几个文件,这几个文件有什么作用呢?首先看到有个.SVC文件,我们知道,每一个ASP.NET Web服务都具有一个.asmx文本文件,客户端通过访问.asmx文件实现对相应Web服务的调用。与之类似,每个WCF服务也具有一个对应的文本文件,其文件扩展名为.svc。基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上。换句话说,因为我们的服务会寄宿在IIS上,IIS通过访问这个SVC文件,来找到你相应的服务信息,供客户端调用。这里就不贴图了,大家可以自己在自己的工程里看。

  创建一个wcf服务需要几个步骤,

 1.创建服务契约

 2.实现服务内容

 3.创建服务宿主

 4.客户端调用服务

 

                                                                                                

       首先我们来把IService1.cs和Service1.svc.cs这两个文件里命名空间中的内容全部删除,然后,我们自己手写一下。1.我们看到这个服务契约,其实实际上除了加了两个特性【servicecontract】和【operationcontract】和普通的接口没啥区别。2.我们看到实现这个服务内容,跟普通的写方法没区别。3.我们打开.SVC文件,将其指令内容改成与我们现在服务相匹配的,让IIS能获取服务相关的信息,完成寄宿。4.服务调用,我们先把.SVC文件设置为起始页,然后按F5看一下。

 

                                                                                               

                                                                                                                                                                                                     (1)

 

 

                                                                                              

 

                                                                                                                                                                                        (2)

 

                                                                                                               

                                                                                                                                                                                                               (3)  

                                                                                                                       

                                                                                                                                                                                                     (4)

                 通过WCF客户端测试工具,我们发现我们服务端的WCF已经编写好了可以调用了。那么我们客户端怎么处理呢?既然我们之前说寄宿程序要一直运行,WCF才能被调用。那么我们现在就把之前写好的WCF服务端发布到IIS,这样IIS就是宿主,我们的WCF程序就寄宿到IIS上了。发布后点击SVC文件,再点击svcutil.exe 旁的链接,出现一个很多的XML的页面。这些xml节点好像是叫做元数据,忘了。那么这些节点有什么用呢?其实他们是我们刚写的那个WCF服务的元数据信息,类似于这整个服务的一种描述吧。WCF是通过soap通信的,但soap是个什么东西呢?跟这个XML有关,后续再相信跟大家解释。

                                                                                             

 

 

                                                                                                                

                出现XML页面证明你的服务已经发布成功了,下面我们创建一个控制台应用程序,然后在这个程序里点击添加服务引用,输入的地址就是这个XML页面的地址。然后点击转到,这里命名空间,想改就改,不想改也无所谓。

                                                                                                              

         然后我们编写代码,然后就可以调用这个服务了。我们看到我们引用服务后,在这个ServiceReveerence1的命名空间下,VS帮我们自动创建了一个服务客户端。其实这个客户端的本质是一个继承自ClientBase的服务调用代理对象。而ClientBase本质上也是通过channel来进行通信调用的。

下一章,我们的自我寄宿中将讲到这部分内容,而且客户端的调用将也会自己手写。

       static void Main(string[] args)
        {
            ServiceReference1.PersonClient Gy = new ServiceReference1.PersonClient();
            Console.WriteLine(Gy.sayHello("Gy", 23));
            Console.ReadKey();
        }

运行结果:

                                 

   原本写了一半没保存,又写了一遍,头皮发麻啊,如果大家打算深入学习这些,可以参考大佬artech: http://www.cnblogs.com/artech/archive/2007/09/15/893838.html,或者这个携程大牛,色情博主的博客:http://www.cnblogs.com/huangxincheng/p/4573556.html。看了下他们的博客,真的倍受打击,感觉自己小菜鸟,而且真的受益匪浅。

 

 

 

 

 

 

 

 

                                                                                          

   

 

转载于:https://www.cnblogs.com/rodean/p/8409257.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值