How to use .Net Remoting Configuration files
.NET Remoting configuration files allow you to specify parameters for most aspects of the remoting framework. These files can define tasks as simple as registering a channel and specifying a Type as a server-activated object, or can be as complex as defining a whole chain of IMessageSinks with custom properties.
通过.Net Remoting配置文件可以为Remote Objects设定许多参数,如Channel、SAO服务端激活对象类型(Singleton/SingleCall)等等,方便以后在不用修改代码或重新编译的情况下,改变Remote Objects的行为。
1,如下是Server端典型的Remoting配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http"/>
</channels>
<service>
<wellknown mode="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端典型的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown type="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
<channel ref="http">
<clientProviders>
<formatter ref="binary" />
</clientProviders>
</channel>
其中,formatter ref=”binary” or “soap”。formatter ref指要在通道上发送的消息格式,在此示例中为二进制,以增强性能。
(2)Server Side
<channel ref="http">
<serverProviders>
<provider ref="wsdl" />
<formatter ref="binary" typeFileterLevel="Full" />
<formatter ref="soap" typeFileterLevel="Full" />
</serverProviders>
</channels>
typeFilterLevel表示当前自动反序列化级别,支持的值包括 Low(默认值)和 Full。
Reference:
1. Ingo Rammer, Advanced .Net Remoting.
2. MSDN