1,如下是Server端典型的Remoting配置文件:
<?
xml
version
="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端典型的配置文件:
<?
xml
version
="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
<
channel
ref
="http">
<
clientProviders
>
<
formatter
ref
="binary"
/>
</
clientProviders
>
</
channel
>
其中,
formatter ref=”binary” or “soap”
。
formatter ref
指要在通道上发送的消息格式,在此示例中为二进制,以增强性能。
(
2
)
Server Side
<
channel
ref
="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
Reference: