您的位置:首页 > 编程语言 > C#

C# .Net Remoting示例

2010-05-10 11:07 387 查看
IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能。但如果客户端和服务端不在同一台机器时,我们不能注册IPCChannel。

IPC(Inter-Process Communication,进程间通信)

/Files/wucg/_TestProjects/TestNetRemoting_IPC通信.rar

eg1:

server端

namespace DotNetRemotingDemo2Server
{
class Program
{
static void Main(string[] args)
{
RemotingConfiguration.Configure("DotNetRemotingDemo2Server.exe.config",false);
Console.ReadLine();
}
}
}

配置:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
<system.runtime.remoting>
<application name="RemoteServer">
<service>
<!--<wellknown type="RemoteHelloConsole.Hello,RemoteHelloConsole" objectUri="Object.MyObject" mode="Singleton" />-->
<wellknown type="RemoteHelloConsole.Hello,RemoteHelloConsole" objectUri="Object.MyObject" mode="SingleCall" />
</service>
<channels>
<channel ref="ipc" portName="testPipe" />
</channels>
</application>
</system.runtime.remoting>
</configuration>

Client端:
namespace DotNetRemotingDemo2Client
{
class Program
{
static void Main(string[] args)
{
RemoteHelloConsole.Hello hello =
(RemoteHelloConsole.Hello)Activator.GetObject(typeof(RemoteHelloConsole.Hello),
"ipc://testPipe/Object.MyObject");

try
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(hello.Greeting("abc123" + i));
}
}
catch (Exception ex)
{

Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
}

eg2:

Server端:

namespace DotNetRemotingDemo1
{
class Program
{
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(
//typeof(RemoteHelloConsole.Hello), "Hi", WellKnownObjectMode.SingleCall);
typeof(RemoteHelloConsole.Hello), "Hi", WellKnownObjectMode.Singleton);
Console.WriteLine("press return to exit.");
Console.ReadLine();
}
}
}

Client端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace DotNetRemotingClient
{
class Program
{
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);

RemoteHelloConsole.Hello hello = (RemoteHelloConsole.Hello)Activator.GetObject(typeof(RemoteHelloConsole.Hello),
"tcp://localhost:8086/Hi");
if (hello == null) {

Console.WriteLine("can't locate server.");
return;
}
try
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine( hello.Greeting("abc123" + i) );
}
}
catch (Exception ex)
{

Console.WriteLine(ex.Message);
}
Console.ReadLine();

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: