• (1)WCF少废话系列之 _Hello WCF!


    本节旨在通过实例的方式让初学者对WCF有一个感性的认识,坚持由特殊到普遍再由普遍到特殊的认知规律。

    WCF(Windows Communication Fundation),微软分布式通信架构的集合,她集成并发展了微软以往的分布式解决方案,如DECOMXML Web ServiceWSEremotingEnterprise service MSMQ(微软消息队列)Namedpipe(命名管道)WCF并非简单的将以上几种技术揉合起来,而是提供了统一的、互操作与安全可依赖的解决方案。

    废话少说,我们通过一个实例从宏观上了解WCF是如何实现分布式应用的

    WCF服务器端需要寄生在某个进程中才能发挥作用,下面讲解WCF的寄宿方式及其调用方式

    ² Console(控制台)寄宿

    Step 1

    ü 新建契约类库项目,命名:WCFDemo.Contracts,添加System.ServiceModel.dll引用(右击项目名称,在弹出的菜单中选择添加引用,在弹出的对话框中选择【.NET】选项卡,找到System.ServiceModel,点击确定即可)

    ü 新建一个接口,命名:IHello.cs.接口的定义如下:

    namespace WCFDemo.Contracts

    {

        //这就是服务契约的标识,用来定义具体服务的相关操作并公开此服务,如果无此标识将无法向外界公开服务

        [ServiceContract]

        public interface IHello

        {

            //操作契约标识,定义对外公开的操作以及操作的一些行为

            [OperationContract]

            string SayHello(string HelloTo);

        }

    }

     

    Step 2

    ü 新建一个服务类库,命名:WCFDemo.Services

    ü 添加WCFDemo.Contracts项目引用(右击项目名称,在弹出的菜单中选择添加引用,在弹出的对话框中选择【项目】选项卡,找到WCFDemo.Contracts,点击确定即可)

    ü 新建一个服务类,命名:Hello.cs,类的定义如下:

    namespace WCFDemo.Services

    {

        //继承IHello接口,并实现接口中的方法

        public class Hello : IHello

        {

            public string SayHello(string HelloTo)

            {

                return string.Format("Hello {0}!", HelloTo);

            }

        }

    }

     

    Step 3

    ü 新建WCF服务器寄宿Console程序,记得选择的项目类型为【控制台应用程序】,添加WCFDemo.ContractsWCFDemo.Services项目引用

    ü Programe.cs 文件中写下以下代码

    namespace WCFDemo.WCFServer

    {

        class Program

        {

            static void Main(string[] args)

            {

                using (ServiceHost host = new ServiceHost(typeof(Hello)))

                {

                    host.AddServiceEndpoint(typeof(IHello), new WSHttpBinding(), "http://localhost/WCFDemo/Hello");

                    host.Open();

                    host.Opened += (object sender, EventArgs e) =>

                    {

                        Console.WriteLine("WCF 服务器端Console寄宿程序已启动!");

                    };

                    Console.ReadLine();

                }

            }

        }

    }

     

    Step 4

    ü 新建WCF客户端Console程序,命名:WCFDemo.WCFClient,记得选择的项目类型为【控制台应用程序】,并添加WCFDemo.ContractsWCFDemo.Services项目引用

    ü Programe.cs 文件中写下以下代

    namespace WCFDemo.Client

    {

        class Program

        {

            static void Main(string[] args)

            {

                //绑定类型,如何访问服务器

                WSHttpBinding binding = new WSHttpBinding();

     

                //地址,从哪儿找到服务

                string address = "http://localhost/WCFDemo/Hello";

     

                //建立与服务器指定的服务通道

                ChannelFactory<IHello> factory = new ChannelFactory<IHello>(binding, address);

     

                //创建通道实现通信

                IHello hello = factory.CreateChannel();

     

                //调用服务器端暴露的操作(方法)

                Console.WriteLine(hello.SayHello("WCF"));

                Console.ReadLine();

            }

        }

    }

     

    Step 5

    ü 右击WCFDemo.WCFServer控制台项目,选择调试-》启动新实例,完成服务器寄宿

     

    ü 右击WCFDemo.WCFClient控制台项目,选择调试-》启动新实例,查看客户端是否输入正确的信息

     

    至此,一个简单的WCF分布式应用程序就算完成了,除了控制台进行服务的寄宿外,还可以通过Windows Services(Windows 服务)WinForm应用程序,Internet Information Service(IIS)WEB服务器寄宿,以下讲述IIS的寄宿方式,其它的寄宿方式与Console寄宿类似,这里面不再赘述

    以上建好的代码结构如下:

     

    ² IIS Web服务器寄宿

    IIS Web服务器寄宿是最为便捷的一种寄宿方式,易于布署,同时还可以通过IIS来实现管理与控制,是值得推荐的一种寄宿方式

    WCFIIS寄宿非常类似于XML Web Service的布署方式,WebService提供的是一个以asmx为后缀名的文件,而WCF提供的是一个以SVC为结尾的文件,现在大家可以感受到本章刚开始那句话的用意了吧,WCF统一了微软以往分布式的解决方案,但不管如何统一,本质性的东西都是要继承下来的,好了,废话少说,接下来我们看看如何实现服务的IIS寄宿

    1.       新建一个WCF服务应用程序,命名:WCFDemo.WCFIIS,记得选择的项目类型为:WCF服务应用程序,添加WCFDemo.Contracts项目引用

    2.       右击WCFDemo.WCFIIS,点击添加-》新建项目-WCF服务,命名:HelloWCF.svc,并将其继承的接口更改为WCFDemo.Contracts项目中定义的IHello接口,并实现其中的方法,代码如下:

    namespace WCFDemo.WCFIIS

    {

        // 注意: 使用重构菜单上的重命名命令,可以同时更改代码、svc 和配置文件中的类名“HelloWCF”

        public class HelloWCF : IHello

        {

            public string SayHello(string HelloTo)

            {

                return string.Format("Hello {0}!", HelloTo);

            }

        }

    }

     

    至此,WCF服务的IIS寄宿已经完成,下面我们通过两种方式来实现以IIS寄宿方式的服务调用

    Ø VS自带的WCF测试客户端

    首先将当前的IIS寄宿项目WCFDemo.WCFIIS设为启动项目(右击项目,在弹出的菜单中选择【设为启动项目】),双击要调用的SVC文件,点击工具栏上的【启动调试】按钮或者按下F5快捷键,启动调试,此时VS会启动WCF测试客户端,界面如下:

     

    双击要测试的方法,填写相应的参数信息,点击【调用】按钮,

    Ø 通过添中服务引用的方式调用

    让我们把目光转到WCFDemo.WCFClient项目上来,添加WCF的服务引用类似于添加WebService引用

    右击WCFDemo.WCFClient项目,点击【添加服务引用】菜单,会弹出的菜单中点击【发现】按钮,会出现以下选项

     

     

    选择HelloWCF.svc,并将命名空间命名为:HelloWCF,点击【确定】按钮,至此,一个WCF服务应用添加成功了

    调用WCF服务

     

    WCFDemo.WCFClient.HelloWCF.HelloClient client = new WCFClient.HelloWCF.HelloClient();

    Console.WriteLine(client.SayHello("WCF"));

    Console.ReadLine();

     

    好了,本节内容到此结束了,吃中饭了

  • 相关阅读:
    Ubuntu18.04可执行文件运行提示No such file or directory
    Linux gcc(ar命令)打包库到另一个库中的另外一种方法
    干干净净的grep
    C语言里面和时间有关的函数
    Ubuntu上安装tftp服务
    因为新冠,宅家2周,折腾了一下电视盒子。
    批量处理文件的Python程序
    Windows 10中使用VirtualBox
    重采样Resample 的一些研究记录。
    微信公众号接入第三方服务器,设置自动回复、关键回复、自定义菜单,配置及开发流程
  • 原文地址:https://www.cnblogs.com/nation/p/3651755.html
Copyright © 2020-2023  润新知