好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

wcf基础笔记

wcf基础笔记

 嘻嘻哈,其实学习wcf纯属意外,因为当时是想看一下wpf,结果很不小心搜成了wcf(不知道当时心里怎么想的手给打错了),因为已经了去了解了wcf并且google了一些资料,心想既来之则安之,便整理了一些基本的笔记,写出来顺便就当理整理一下我的思路了。也可以给wcf想入门的同志们一点点参考。

    wcf是做什么的,网上讲解很多,我就不多说了,我只想把我的第一个wcf代码程序展示出来,并且会附上详细注释。因为我的工作一直是做winform程序的,所以,该程序的服务器端和客户端均使用控制台应用程序进行开发。

     wcf是具体的开发流程,msdn上解释是分为六部:

1,定义 Windows Communication Foundation 服务协定,说白了也就是我们通常所说的接口(intferface),只是比平时的接口多了几个属性。如下:

     ///   <summary> 
     ///   这些属性的命名空间为using System.ServiceModel
      ///   该程序集一般情况下在C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation文件中
      ///   </summary> 
    [ServiceContract]   //  服务协定 
     public   interface   IHelloWordWCF
    {
        [OperationContract]    //  数据协定,改属性表明,改服务会公开此方法,也就说客户端可以调用到 
         void  Writer( string   name);

        [OperationContract]
          string   DoSome();

          void  S();            //  无协定,客户端将无法调用 
    }

怎么样,定义一个协议简单吧,那就进行第二步

2,实现 Windows Communication Foundation 服务协定,其实也就是定义一个继承自刚才我们定义的协定(IHellowWordWCF)的类

     ///   <summary> 
     ///   实现改协定
      ///   </summary> 
     public   class   HelloWordWCF:IHelloWordWCF
    {

          #region  IHelloWordWCF 成员

         public   void  Writer( string   name)
        {
            Console.WriteLine(name);
            Console.ReadLine();
        }

          public   string   DoSome()
        {
              return   "  yangyang  "  ;
        }

          public   void   S()
        {

        }

          #endregion  
    } 

这不,就实现了协定,在接口方法中可以写需要实现的功能,下一步就没这么常见了。
3,承载和运行基本的 Windows Communication Foundation 服务,也就是说,你刚才实现了协定的服务,那么,还得去承载运行发布呢。以方便客户端的调用。

         //  定义一个基址。以方便客户端寻址。该URI指定HTTP方案、地计算机、端口号 8080 
         static  Uri uri =  new  Uri( "  http://localhost:8080/yangyang  "  );
          static   void  Main( string  [] args)
        {
              //  创建Service实例承载服务
              //  HelloWordWCF:承载服务的基本协定。
              //  uri:包含承载服务的基址 
             using  (ServiceHost host =  new  ServiceHost( typeof  (HelloWordWCF), uri))
            {
                  try  
                {
                      //  加载该服务的终结点, 
                    host.AddServiceEndpoint( typeof (IHelloWordWCF),  new  WSHttpBinding(),  "  HelloWordWCF  "  );

                      //  控制服务元数据和相关信息的发布。  发布服务了 
                    ServiceMetadataBehavior smb =  new   ServiceMetadataBehavior();
                    smb.HttpGetEnabled  =  true ;   //  元数据以使用 HTTP/GET 请求进行检索。 
                     host.Description.Behaviors.Add(smb);
                    host.Open();
                    Console.Write(  "  The Service address is {0}  "  , uri);
                    Console.ReadLine();
                    host.Close();

                }
                  catch  (CommunicationException ex)   //  表示服务或客户端应用程序中的通信错误。 
                 {
                      throw  ;
                }

            }
        } 

好了,至此,我们的超级超级简单的服务器端的编码算是完成了,编译成功后,调试-启动新实例。在浏览器中输入刚才定义的基址 http://localhost:8080/yangyang ,效果如下,

然后呢,我们打开vs的命令提示,输入“WcfTestClient”,然后回车,弹出如下窗体,输入我们的服务基址,就可以测试我们的服务是否可以正常工作了。如下图

如果测试通过,恭喜了,我们的服务器端已经建立起来了,现在,我们就需要实现我们的客户端了。也就是我们的第四步;

4,创建 Windows Communication Foundation 客户端

 建了项目,我们首先引用using System.ServiceModel

 我们需要命令行工具  ServiceModel 元数据实用工具 (Svcutil.exe) 帮我们生成服务器代码文件和配置文件,如下图所示

如图,首先执行红下滑线的命令,后面是我们服务的基址,然后回车,就会在蓝色下划线的目录生成这两个文件,我们需要在客户端添加现有文件,将这两个文件进行添加,generatedProxy.cs是服务文件的代码,使我们可以访问服务器的接口方法,app.config中,是生成服务器端的一些配置。接下来的第五步

5,配置基本 Windows Communication Foundation 客户端,第五步吧,其实是做一些总结点的配置,因为我这个演示是比较简单的,没有做繁杂的操作,所以,我就原本原样的使用svcutil.exe生成的配置,蓝色圈出的地方是服务代码中的终结点的名称,我们需要记录一下。

呵呵,这时候如果一切顺利,马上就要成功了,最后一步了

6,使用 Windows Communication Foundation 客户端

代码如下

         static   void  Main( string  [] args)
        {
              //  使用刚才记录终结点的名称,初始化一个服务协定的实体 
            HelloWordWCFClient client =  new  HelloWordWCFClient( "  WSHttpBinding_IHelloWordWCF  "  );
            Console.WriteLine(client.DoSome());   //  呵呵,我承认我的设计有点扯淡,协定中DoSome()中返回了“yangyang”这个字符串。 
             Console.ReadLine();
        } 

ok,一个简单的wcf程序就好了,现在,在文件夹中找出我们的服务端的程序,在bin-debug中编译好的Service.exe。然后,调试我们的客户端,结果如下图

这个时候我们的客户端已经成功调用了服务器端的方法。

我列出我的项目结构图:

所有的代码都在服务协定,接口都在programs里面写着。客户端蓝色圈出部分是svcutil.exe生成的。两个项目都需要添加syste.ServiceModel程序集。

哪里写的不对,还请读者体谅一下,wcf的新手拉。嘻嘻

 

 

分类:  wcf

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于wcf基础笔记的详细内容...

  阅读:41次

上一篇: CodeLove初版发布

下一篇:抓数据小程序