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的新手拉。嘻嘻

 

 

 

 

 

 

posted on 2013-01-08 17:13  abc+  阅读(2210)  评论(3编辑  收藏  举报

导航

杨阳加油 加油 加油 加油 加油 加油 加油 加油 杨阳