.NET Remoting程序开发入门篇(三)
来源:互联网 发布:java多态原理 编辑:程序博客网 时间:2024/06/05 05:05
根据第一部分所述,根据激活模式的不同,通道类型的不同服务器端的实现方式也有所不同。大体上说,服务器端应分为三步:
1、注册通道
要跨越应用程序域进行通信,必须实现通道。如前所述,Remoting提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。
注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后using名字空间:System.Runtime.Remoting.Channel.Tcp。代码如下:
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
在实例化通道对象时,将端口号作为参数传递。然后再调用静态方法RegisterChannel()来注册该通道对象即可。
2、注册远程对象
注册了通道后,要能激活远程对象,必须在通道中注册该对象。根据激活模式的不同,注册对象的方法也不同。
(1) SingleTon模式
对于WellKnown对象,可以通过静态方法RemotingConfiguration.RegisterWellKnownServiceType()来实现:
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerRemoteObject.ServerObject),
"ServiceMessage",WellKnownObjectMode.SingleTon);
(2)SingleCall模式
注册对象的方法基本上和SingleTon模式相同,只需要将枚举参数WellKnownObjectMode改为SingleCall就可以了。
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerRemoteObject.ServerObject),
"ServiceMessage",WellKnownObjectMode.SingleCall);
(3)客户端激活模式
对于客户端激活模式,使用的方法又有不同,但区别不大,看了代码就一目了然。
RemotingConfiguration.ApplicationName = "ServiceMessage";
RemotingConfiguration.RegisterActivatedServiceType(typeof(ServerRemoteObject.ServerObject));
为什么要在注册对象方法前设置ApplicationName属性呢?其实这个属性就是该对象的URI。对于WellKnown模式,URI是放在RegisterWellKnownServiceType()方法的参数中,当然也可以拿出来专门对ApplicationName属性赋值。而RegisterActivatedServiceType()方法的重载中,没有ApplicationName的参数,所以必须分开。
3、注销通道
如果要关闭Remoting的服务,则需要注销通道,也可以关闭对通道的监听。在Remoting中当我们注册通道的时候,就自动开启了通道的监听。而如果关闭了对通道的监听,则该通道就无法接受客户端的请求,但通道仍然存在,如果你想再一次注册该通道,会抛出异常。
//获得当前已注册的通道;
IChannel[] channels = ChannelServices.RegisteredChannels;
//关闭指定名为MyTcp的通道;
foreach (IChannel eachChannel in channels)
{
if (eachChannel.ChannelName == "MyTcp")
{
TcpChannel tcpChannel = (TcpChannel)eachChannel;
//关闭监听;
tcpChannel.StopListening(null);
//注销通道;
ChannelServices.UnregisterChannel(tcpChannel);
}
}
代码中,RegisterdChannel属性获得的是当前已注册的通道。在Remoting中,是允许同时注册多个通道的,这一点会在后面说明。
- .NET Remoting程序开发入门篇(三)
- ASP.NET Remoting程序开发入门篇
- .NET Remoting程序开发入门篇(一)
- .NET Remoting程序开发入门篇(二)
- .NET Remoting程序开发入门篇(五)
- .NET Remoting程序开发入门篇(六)
- .NET Remoting程序开发入门篇(七)
- .NET Remoting程序开发入门篇(八)
- NET Remoting程序开发入门篇
- .NET Remoting程序开发入门篇
- .NET Remoting程序开发入门篇
- .NET Remoting程序开发入门篇http://www.it201.com/jianzhan/wzkf/aspnet/200611/10743.html
- .Net Remoting 入门
- .Net Remoting 入门
- 分离服务程序实现(.Net Remoting学习三)
- .Net Remoting 小程序
- flex 3 + .net开发flash Remoting三 --- Flex编程
- 回顾.NET Remoting分布式开发
- 如何从Hibernate2.1升级到Hibernate3.0?
- 利用INI文件進行數據庫連接
- css圆角效果
- IT战略规划如何做得更务实
- C#对象的 Xml序列化与反序列化
- .NET Remoting程序开发入门篇(三)
- HIBERNATE 学习心得
- HIBERNATE检索对象方式
- PDA 开发入门大全
- OpenSocial API 概述
- Google Gadgets (1):从 Hello World 开始
- 建表存储过程建在了错误的库上解决方法
- .NET Remoting程序开发入门篇(五)
- .NET Remoting程序开发入门篇(六)