• 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
  • 相关阅读:
    leetcode Power of Two
    leetcode Merge Two Sorted Lists
    Mac linux 安装memcached服务 用法
    Vsftp配置都没有问题 连接不上 530 Login incorrect 解决方法
    mysql 远程连接不上 %用户已经添加了
    Centos yum 安装mysql报错 No package mysql-server available.
    Linux 查询程序安装路径 是否安装
    php报错 Call to undefined function mb_stripos()
    mac编译openssl扩展报错 openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
    在安装mysqli的时候,出现error: ext/mysqlnd/mysql_float_to_double.h: No such file or direc
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2851904.html
Copyright © 2020-2023  润新知