zoukankan      html  css  js  c++  java
  • Remoting 配置格式说明(转)

    使用配置文件的好处是什么?很简单,他可以简化代码,可以随时更改,通道,端口,URL的设置不需要重新编译就可以运行。所以在实际项目中经常采用这种方式。
    怎么写一个服务器端的配置文件?
    下面举个例子:
    <configuration>
      <system runtime remoting>   ///配置的都是与remoting有关的内容
        <application>  ///可以包含多个application
           <serive>//表示在我的一个程序中注册了一个service
            <wellknown mode="Singleton" ObjectUri="HelloNewegg"  ///ObjectUri为访问这个对象的地址
             type="Newegg.RAM,Accounting"/>   ///type表示对象的类型;Newegg.RAM表示这个类的名字;
                                                                       ///Accounting表示程序集,实际表现为一个DLL
            </serive>
            <channels>//可以在里面注册多个通道
                 <channel port="8888" ref="http"/>  ///ref表示引用了machine.config本身http不是在这个配置文件里配置的
            </channels>
        </application>
      </system runtime remoting>
    </configuration>
    怎么写一个客户器端的配置文件?
    <configuration>
      <system runtime remoting> ///配置的都是与remoting有关的内容
        <application>  ///可以包含多个application
           <client>//表示在我的一个程序中注册了一个service
            <wellknown  ObjectUri="http://localhost:8888/HelloNewegg"
             type="Newegg.RAM,Accounting"/>  
                                             
            </client>
            <channels>
                 <channel port="0" ref="http"/> //port="0"什么意思?表示客户端不用探听任何端口。
            </channels>
        </application>
      </system runtime remoting>
    </configuration>

    使用配置文件的代码怎么写??
    服务器端:RemotingConfiguration.Configure("NeweggServer.exe.config");///NeweggServer表示服务器端的工程名
              有时候也这样写:
                string cfg=AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
                RemotingConfiguration.Configure(cfg);
    客户端:RemotingConfiguration.Configure("NeweggClient.exe.config");///NeweggClient表示客户器端的工程名
               RAM obj=new RAM();

    1,如下是Server端典型的Remoting配置文件:
    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
     <system.runtime.remoting>
        <application>
          <channels>
            <channelref="http"/>
          </channels>
          <service>
            <wellknownmode="Singleton"
                       type="ComponentHost.CustomerManager, ComponentHost"
                       objectUri="CustomerManager.soap"/>
          </service>
     
         </application>
       </system.runtime.remoting>
    </configuration>
     
    (1)当Remote Objects部署在Console/Windows Form、Windows Services下时(上面的配置文件channel需要设置port属性),相应Server端声明Remote Objects的代码可以简化为:
    string filename = "server.exe.config";
    RemotingConfiguration.Configure(filename);
     
    (2)如果Remote Objects部署在IIS时,根本就不需要任何代码声明。但是需要将上述配置文件命名为:web.config,并且将Remote Objects的DLL文件安置在web application的BIN文件夹。
     
    一般在实际应用中,基本上将Remote Objects部署在IIS环境中,好处是(I)不需要编写额外的代码;(II)只要启动机器,远程对象就启动了。不需要你半夜三更跑到公司去登录,然后启动发生故障的远程服务;(III)容易与IIS认证服务进行集成;(IV)可能还有更多优点,我现在没有想到。
     
    (3)如果需要声明多个远程对象,只需要在<service>与</service>之间添加相应的Remote Objects配置信息即可。
     
    (4)另外需要注意type属性为:<namespace>.<class>, <assembly>
     
    2,如下是Client端典型的配置文件:
    <?xmlversion="1.0"encoding="utf-8"?>
    <configuration>
     <system.runtime.remoting>
        <application>
     
          <client>
            <wellknowntype="ComponentHost.CustomerManager, RemotingTest"
                       url="http://localhost/ComponentHost/CustomerManager.soap"/>
          </client>
     
        </application>
     </system.runtime.remoting>
    </configuration>
     
    要注意type属性的设定:<namespace>.<class>, <assembly>
    如果Client通过SoapSuds产生Remote Objects的元数据assembly,或者是Shared Assembly(如Interface或Abstract Class),这里<assembly>则为上述assembly的名称。
    如果是通过SoapSuds产生Source code,则<assembly>为Client应用程序名(无exe后缀)。
     
    同时,Client端application调用Remote Objects时,可以省掉:注册通道、Activator.GetObject()/RemotingConfiguration.RegisterActivatedServiceType()等代码,取而代之的代码为:
    string filename = “clientApplication.exe.config”;
    RemotingConfiguration.Configure(filename);
    下面(疑应为直接)通过new来创建Remote Object实例。
     
    3,标准的.Net Remoting Configuration配置文件
    MSDN中有.Net Remoting Configuration file中全部元素/属性的完整的详细说明,需要的时候再查阅了。一般情况下,知道下面这些属性就够用了。
    <configuration>
       <system.runtime.remoting>
          <application>
            <lifetime /> ――配置Remote Objects生存期的信息
            <channels /> ――配置与远程对象进行通信的信道
            <service />
            <client />
          </application>
       </system.runtime.remoting>
    </configuration>
     
    简单说明:
    (1)<service> ――仅在Server端配置
          <service>
              <wellknown /> ――配置要发布的SAO(已知)对象的信息
              <activated /> ――配置要发布的CAO客户端激活对象的信息
          </service>
     
     
    (2)<client> ――仅在Client端配置,与Server端<service>对应
             <client>
                <wellknown />
                <activated />
            </client>
     
    When using CAOs, the <client> property has to specify the URI to the server for all underlying <activated> entries.
    Note:When using CAOs from more than one server, you have to create several <client> properties in your configuration file.
    当调用CAO远程对象时,必须设定<client>的url属性。如果CAO来自不同的Server,则需要在配置文件中定义多个<client>。如下所示:
         <client url="http://localhost/MyServer>
            <activated type="Server.MyRemote, Client" />
          </client>
     
    4,定制Client/Server Channel元素
    (1)Client Side
    <channelref="http">
        <clientProviders>
              <formatterref="binary"/>
        </clientProviders>
    </channel>
    其中,formatter ref=”binary” or “soap”。formatter ref指要在通道上发送的消息格式,在此示例中为二进制,以增强性能。
     
    (2)Server Side
    <channelref="http">
        <serverProviders>
              <providerref="wsdl"/>
              <formatterref="binary"typeFileterLevel="Full"/>
              <formatterref="soap"typeFileterLevel="Full"/>
        </serverProviders>
    </channels>  
    typeFilterLevel表示当前自动反序列化级别,支持的值包括 Low(默认值)和 Full。
    1. Ingo Rammer, Advanced .Net Remoting.
    2. MSDN


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanghefu/archive/2007/07/18/1696818.aspx

  • 相关阅读:
    [UOJ#128][BZOJ4196][Noi2015]软件包管理器
    [UOJ#127][BZOJ4195][NOI2015]程序自动分析
    [BZOJ3653]谈笑风生
    Django 数据库查询优化
    C#中引用(ref关键字)参数
    C#中值参数的使用实例
    静态变量和实例变量
    全局变量和局部变量的理解
    C#方法定义和调用-2
    C#函数的方法定义和方法调用小议
  • 原文地址:https://www.cnblogs.com/MayGarden/p/1640647.html
Copyright © 2011-2022 走看看