從用戶端到服務端的遠程網路通訊,發送訊息並返回遠程訊息。
遠程對象(RemoteTest)C# 類庫代碼部分:
using System;
namespace RemoteTest
{
public class TestLoader : MarshalByRefObject
{
public TestLoader()
{
string stringWrite = "stor load.";
Console.WriteLine(stringWrite);
}
public string sayHello(string msg)
{
Console.WriteLine("Message: { 0 } ", msg);
Console.WriteLine("Welcome to Message send Systems");
string stc = "Hello from remote";
return stc;
}
}
}
RemoteTest組件中的 TestLoader 類繼承了 System.MarshalByRefObject 類,便讓用戶端能訪問該遠程對象了。
服務端(Server)命令列應用程式代碼部分:
using System;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteTest;
namespace Server
{
public class Program
{
public static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(9932);
ChannelServ ices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(TestLoader),"TestLoader",WellKnownObjectMode.SingleCall);
Console.WriteLine("Hello From Server");
Console.ReadLine();
}
}
}
註:引用添加組件:System.Runtime.Remoting(下同)。
用戶端(Client)命令列應用程式代碼部分:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteTest;
namespace Client
{
public class ClassClient
{
public static void Main(string[] args)
{
string stringTcp = "tcp://localhost:9932/TestLoader";
TestLoader loader = (TestLoader)Activator.GetObject(typeof(RemoteTest.TestLoader),stringTcp);
string msg;
Console.Write("Enter Message: ");
msg = Console.ReadLine();
Console.WriteLine("Message: {0}" + msg);
string res = loader.sayHello(msg);
Console.WriteLine(res);
}
}
}
這裡對new 管道聲明的那兩行已略寫。
程式調試:啟動Server後,再啟動Client。輸入值後關閉Client,值便在Server中顯示。