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
    }

     

  • 相关阅读:
    实现对DataGird控件的绑定操作
    EasyUI-datagrid中load,reload,loadData方法的区别
    easui Pagination Layout
    easyUI datagrid 排序
    jQuery EasyUI教程之datagrid应用
    solr入门之多线程操作solr中索引字段的解决
    序列自相关矩阵的计算和分析
    UVa 12403
    滑动窗体的最大值(STL的应用+剑指offer)
    bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱
  • 原文地址:https://www.cnblogs.com/zmc/p/2434576.html
Copyright © 2011-2022 走看看