• WCF托管服务和客户端代理


    参考文章:http://www.cnblogs.com/wayfarer/archive/2008/01/02/1022967.html

    WCF的典型宿主(托管服务的方式)包括以下四种:
    1、"Self-Hosting" in a Managed Application(自托管宿主)
    2、Managed Windows Services(Windows Services宿主)
    3、Internet Information Services(IIS宿主)
    4、Windows Process Activation Service(WAS宿主)

    1、自托管宿主
    利用WCF提供的ServiceHost<T>提供的Open()和Close()方法,可以便于开发者在控制台应用程序,Windows应用程序乃至于ASP.NET应用程序中托管服务。
    using (ServiceHost host = new ServiceHost(...)) { host.Open(); ... }

    由于ServiceHost实例是被创建在应用程序域中,因此我们必须保证宿主进程在调用服务期间不会被关闭,因此我们利用Console.Read()来阻塞进程,以使得控制台应用程序能够一直运行,直到认为地关闭应用程序。如果是Windows应用程序,则可以将创建ServiceHost实例的代码放在主窗体的相关代码中,保证服务宿主不会被关闭。
    在通常的企业应用中,我们很少会采用自宿主方式托管服务,这是因为这种方式必须要在应用程序运行下,客户端才能够调用服务,且并不便于随时启动和停止服务。除了不具有易用性与易管理性之外,在可靠性、性能等诸多方面受到很多限制。但由于它简单、易于实现,因而往往用于开发期间的调试或演示环境。

    自托管宿主支持所有的绑定。

    2、Windows Services宿主

    Windows Services宿主则完全克服了自托管宿主的缺点,它便于管理者方便地启动或停止服务,且在服务出现故障之后,能够重新启动服务。我们还可以通过 Service Control Manager(服务控制管理器),将服务设置为自动启动方式,省去了服务的管理工作。此外,Windows Services自身还提供了一定的安全性以及检测机制和日志机制。

    Windows Services宿主的实现也非常简单。我们可以在Visual Studio中创建Windows Services项目。在创建项目之后,就可以创建一个继承了System.ServiceProcess.ServiceBase类的Windows服务类。Windows服务类继承了ServiceBase类的OnStart()和OnStop()方法,完成Windows服务的启动与停止。我们可以重写这两个方法,将ServiceHost的启动与关闭对应地放入这两个方法的实现中。

    这种方式唯一的缺点却是对宿主的部署相对比较复杂,必须通过.NET提供的Installutil.exe工具完成对服务宿主的安装(也可以通过安装包的自定义操作完成)。

    安装服务:在设计器视图下,右键,选择“添加安装程序”,在安装程序项目中添加Installer的代码(参考文章),定义服务名称即ServiceInstaller对象的ServiceName。编译生成,把bin下的“项目名.exe”拷到VS2008命令行工具所在目录(如:C:\Program Files\Microsoft Visual Studio 9.0\VC>)下。运行installutil 项目名.exe。输入管理员角色的用户名(计算机名\用户名)和密码。安装完成后,运行Services.msc,可以看到自定义的服务已经存在了。

    3、IIS宿主(说明,这里讲的IIS为IIS 6.0)

    若要使用IIS宿主,需要为程序集中添加一个svc文件。我们可以通过为项目添加一个新项的方式添加svc文件。我们也可以直接创建一个WCF Service应用程序作为IIS宿主,它会自动创建一个svc文件。在svc文件中嵌入WCF服务的代码,完成后发布到IIS目录即可。浏览其中的svc文件,点击wsdl链接可以查看到服务的WSDL信息

    IIS 宿主是一种主要的服务托管方式,这是因为它具有易用性、可维护性、安全性、易于部署等多个优势。然而,它却具有一个致命的缺点,那就是它只支持 HTTP协议的传输绑定。特别对于局域网场景下,如果使用IIS宿主,就无法利用TCP传输的高效率,甚至无法使用MSMQ以及Peer to Peer传输。IIS 7.0(基于Windows Vista和Windows Server 2007)提供的Windows激活服务(WAS)突破了IIS 6.0对于HTTP的依赖。

    4、WAS宿主
    WAS是IIS 7.0的一部分,但也可以独立地安装与配置。WAS支持所有可用的WCF传输协议、端口与队列。
    利用WAS托管服务与IIS宿主托管服务的方法并没有太大的区别,仍然需要创建svc文件,同时在IIS中需要在站点中创建应有程序指向托管应用程序,还可以设置访问服务的别名与应用程序池。
    由于WAS诉诸支持所有的绑定,因此此时的服务绑定并不会受到宿主的限制。


    创建客户端代理:

    A。通过channel factory对象手动创建
    B。通过工具创建SvcUtil,不推荐使用
    C。在Visual Studio中通过在服务端发布元数据,在客户端可以通过添加服务引用自动生成。

    第一种方法,使用channel factory对象创建代理,为此你需要提供地址、绑定和服务契约。新建wcf服务类库WcfServiceLibrary,添加服务契约HelloWcfService。
    Service端:
    //使用基地址和服务类型创建ServiceHost实例
    using (ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary.HelloWcfService), new Uri("http://localhost:8000/MyUrlAddr")))
    {
        host.AddServiceEndpoint(typeof(WcfServiceLibrary.IHelloWcf), new BasicHttpBinding(), "MyService");   //用编码方式添加服务端点
        host.Open();    //Console.Write("host open.");    //Console.ReadLine();
    }
    Clinet端:
    EndpointAddress ep = new EndpointAddress("http://localhost:8000/MyUrlAddr/MyService");  // //创建一个端点地址对象
    IHelloWcf Proxy = ChannelFactory<IHelloWcf>.CreateChannel(new BasicHttpBinding(), ep);  //创建服务的客户端代理
    string getValue = Proxy.HelloWcf();  //客户端通过代理调用WCF服务

  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1748063.html
Copyright © 2020-2023  润新知