zoukankan      html  css  js  c++  java
  • [WCF学习笔记] Hosting

    [转]SOA Service 服务的特点:

    • 服务是平台和位置无关的。
    • 服务是相互隔离的。一个服务的改变不会要求其他服务的改变。
    • 服务是通信协议、格式、传输中性的,灵活的。
    • 服务是可扩展的。
    • 服务行为不是限死的,而是策略可更改和配置的。

    WCF的推出背景:

    • .NET  Remoting: .NET Remoting 提供了一种很有用的方法,用于管理跨应用程序域的同步和异步 RPC 会话,是替代DCOM的实现分布式应用的方案。是微软较为成熟的.net平台下实现分布式应用的解决方案(一般来说,remoting是和平台相关的,需要客户和服务器都是.NET)。当然,.net remoting的宿主Hosting可以是console程序、Winform程序,也可以是IIS,也就是Web service。.net remoting除了支持http和TCP外,还可以通过自定义传输协议来进行传输通信。但.net remoting实际上更适合Intranet而不是Internet,因为.net remoting 是MarshByReference的,可以传变量的引用,直接对服务器对象操作。速度快。而web service 是MarshByValue的,必须传对象的值。速度慢,但可以穿透防火墙。
    • XML Web Serivce:平台无关,能穿透防火墙,Web Serivce是标准。 分几个层次:Http传输、Xml数据格式、SOAP协议封装、WSDL描述、UDDI发布。
    • MSMQ: 用于创建可靠的、分布式、松散连接的、基于消息通讯的应用程序的开发工具。

     

    Hosting :

    和.net Remoting一样,继承自System.MarshalByRefObject 的对象必须Host到某一个运行的进程中,他才开始监听来自Client端的请求,当Client才能通过Proxy远程的调用,Remoting Infrastructure监听到来自Client端的请求,他会激活相应的remote Object(我们只考虑Server Activate Object——SAO)。实际上对于WCF Service也需要一个Host环境才有其发挥作用的舞台。就像Remoting一样,你可以使用任何一种Managed Application——Console Application、WinForm Application、IIS / ASP.NET Application——作为它的Host环境。

     WCF

    在WCF架构图中可以看到,Activation and Hosting层提供了使得服务可以在哪儿启动和宿主的服务。 Service可以宿主在其他应用的上下文之中,也可以self-hosted.

    • Windows Activation Service:在有运行Windows ActivationService的计算机中,WCF应用可以自动启动.
    • EXE: WCF允许服务以可执行文件运行(.EXE files),例如Winforms,console applications
    • Windows Services: WCF允许服务以Windows服务运行.
    • COM+: WCF允许服务以COM+应用运行.

     

    Hosting, which means that you will use a built-in hosting environment such as IIS

    在hosted环境中,开发人员不必创建host应用,因为WCF服务宿主在IIS中。IIS管理和控制服务的生命周期,包括句柄的创建和释放(内存释放,系统资源的释放等)。尽管开发人员不必创建host应用,但是开发人员需要创建目录结构和服务宿主的虚拟目录。hosted服务的好处是可以利用IIS来监控服务的稳定性,而且可以自动启动。


    Self-Hosting, which means that you will build the host environment yourself 

    开发人员需要手动创建服务宿主的环境,来负责服务的创建和生命周期,并对服务的所有方面进行控制。例如,定义Endpoint(或通过configuration),创建ServiceHost等。host应用通过ServiceHost类控制服务句柄的创建和释放,使用Open方法来启动消息收取,使用Close方法来停止和释放服务。这种方法提供更多的灵活性。

     

    Host在托管代码中(例如WinForm applications,console applications, Windows service),部署起来代价更小,灵活性更强

    ServiceHost sh;
    List<ServiceHost> shs = new List<ServiceHost>();
     
    private void Form1_Load(object sender, EventArgs e)
    {
      sh = new ServiceHost(typeof(WCFService.ServiceClass));
      sh.Open(); // Open host, --- use sh.Close() to close host
    }

     

  • 相关阅读:
    Oracle基础知识整理
    linux下yum安装redis以及使用
    mybatis 学习四 源码分析 mybatis如何执行的一条sql
    mybatis 学习三 mapper xml 配置信息
    mybatis 学习二 conf xml 配置信息
    mybatis 学习一 总体概述
    oracle sql 语句 示例
    jdbc 新认识
    eclipse tomcat 无法加载导入的web项目,There are no resources that can be added or removed from the server. .
    一些常用算法(持续更新)
  • 原文地址:https://www.cnblogs.com/zmc/p/2434576.html
Copyright © 2011-2022 走看看