您现在的位置是:首页 >

如何让自己想开些 让.NET Remoting更快些-IPCChannel

火烧 2021-10-14 22:57:01 1072
让.NET Remoti g更快些-IPCCha el   IPCCha el是 NET Framework 里面新增的 它使用 Wi dow 进程间通信 (IPC) 系统在同一计算机上的应用程序域之

让.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); } }

  接下来我们编写服务端代码

  

如何让自己想开些 让.NET Remoting更快些-IPCChannel

  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  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码