如何让自己想开些 让.NET Remoting更快些-IPCChannel
让.NET Remoting更快些-IPCChannel
IPCChannel是 NET Framework 里面新增的 它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息 在同一计算机上的应用程序域之间进行通信时 IPC 信道比 TCP 或 HTTP 信道要快得多 但是IPC只在本机应用之间通信 所以 在客户端和服务端在同一台机器时 我们可以通过注册IPCChannel来提高Remoting的性能 但如果客户端和服务端不在同一台机器时 我们不能注册IPCChannel
下面让我们来看看如何使用IPCChannel
首先我们定义一个RemotingObject类
using System; // 远程对象 public class RemoteObject : MarshalByRefObject { private int callCount = ; public int GetCount() { Console WriteLine( GetCount has been called ); callCount++; return(callCount); } }
接下来我们编写服务端代码

using System; using System Runtime Remoting Channels Ipc; using System Security Permissions; public class Server { [SecurityPermission(SecurityAction Demand)] public static void Main(string[] args) { // 创建一个IPC信道 IpcChannel serverChannel = new IpcChannel( TestChannel ); // 注册这个IPC信道 System Runtime Remoting Channels ChannelServices RegisterChannel(serverChannel); // 打印这个信道的名称 Console WriteLine( The name of the channel is { } serverChannel ChannelName); // 打印这个信道的优先级 Console WriteLine( The priority of the channel is { } serverChannel ChannelPriority); // 打印这个信道的URI数组 System Runtime Remoting Channels ChannelDataStore channelData =(System Runtime Remoting Channels ChannelDataStore) serverChannel ChannelData; foreach (string uri in channelData ChannelUris) { Console WriteLine( The channel URI is { } uri); } // 向信道暴露一个远程对象 System Runtime Remoting RemotingConfiguration RegisterWellKnownServiceType(typeof(RemoteObject) RemoteObject rem System Runtime Remoting WellKnownObjectMode Singleton); Console WriteLine( Press ENTER to exit the server ); Console ReadLine(); Console WriteLine( The server is exiting ); } }
客户端代码
using System; using System Runtime Remoting Channels Ipc; using System Security Permissions; public class Client { [SecurityPermission(SecurityAction Demand)] public static void Main(string[] args) { // 创建一个IPC信道 IpcChannel channel = new IpcChannel(); // 注册这个信道 System Runtime Remoting Channels ChannelServices RegisterChannel(channel); // 注册一个远程对象的客户端代理 System Runtime Remoting WellKnownClientTypeEntry remoteType = new System Runtime Remoting WellKnownClientTypeEntry(typeof(RemoteObject) ipc://TestChannel/RemoteObject rem ); System Runtime Remoting RemotingConfiguration RegisterWellKnownClientType(remoteType); RemoteObject service = new RemoteObject(); Console WriteLine( The client is invoking the remote object ); Console WriteLine( The remote object has been called { } times service GetCount()); } }
主要代码就算完成了 但 还有一个问题 那就是如果服务端和客户端在不同的Windows帐户运行的时候 会有验证权限的问题 对于这个问题 我们只要把服务端的信道注册代码改一下就好了
Hashtable ht = new Hashtable(); ht[ portName ] = TestChannel ; ht[ name ] = ipc ; ht[ authorizedGroup ] = Everyone ; serverChannel= new IpcChannel(ht null provider);
lishixinzhi/Article/program/net/201311/13151相关文章
- 路由器怎么调网速最快 路由器恢复出厂设置了后,怎么上网,求大神指点
- 现在开网店还好做吗 淘宝开网店好开好做吗
- 网络繁忙请稍后再试 打开多玩游戏大厅提示链接服务器失效请稍后再试…
- 怎么做才能把网速变快 能告诉下为什么电脑下载的网速快但是更新游戏的速度很慢
- 又出去才能进来 怎么样才能迅速把一个网站推广出去?
- 怎么限速别人的网速 别人用P2P终结者限制了我得网速,如何破解啊?
- 网速很快网页打开很慢 电脑上网速度很慢,就是开启网页时候,但是下载东西的时候可以500KB怎么解决网高手回答
- 淘宝咋开网店呢 请问新手开网店难怎么样能容易些?
- 网讯物流 网迅怎样实现无人职守
- New IP重塑互联网是重复造轮子
爱学记

微信收款码
支付宝收款码