■ はじめに
* Java の RMI (Remote Method Invocation) のようなことを C# で行う * .NET Framework 3.0から導入されたWCF(以下の関連記事を参照)でも同じことができるし、 そっちの方がいいと思うが、.NET Remoting というやり方を学ぶWCF ~ 基礎知識編 ~
https://blogs.yahoo.co.jp/dk521123/22254537.html
■ サンプル
* オブジェクト、サーバーおよびクライアントの 3 つの部分で構成する。 * この三つを別々のプロジェクトで作成する
オブジェクト
* クラスとして作成し、実行しておく * ポイントは「MarshalByRefObject」を継承していること!!プロジェクト「RmiForMethod」
using System; namespace RmiForMethod { public class Class1 : MarshalByRefObject { public Class1() { Console.WriteLine("Start!!"); } public void SayHellowWorld() { Console.WriteLine("Hello World"); } } }
サーバー側
* System.Runtime.Remotion を参照追加しておく * RmiForMethodも参照追加しておく * コンソールアプリケーションとして作成し、実行しておくプロジェクト「RmiForServer」
using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; namespace RmiForServer { class Program { static void Main(string[] args) { HttpChannel ch = new HttpChannel(4000); ChannelServices.RegisterChannel(ch, false); RemotingConfiguration.RegisterWellKnownServiceType( typeof(RmiForMethod.Class1), "MyServer", WellKnownObjectMode.Singleton); Console.WriteLine("Server is started."); Console.WriteLine("Press <Enter> Key to exit."); Console.ReadLine(); // to stop } } }
クライアント
* RmiForServer、RmiForMethodを参照追加しておく * Windowsアプリケーション(Windows Form。ボタンを追加)として作成し、実行しておく * ボタン押下後、「サーバー側」のコンソールアプリケーションに「Hello World」などが表示されるはずプロジェクト「RmiForClient」
using System; using System.Windows.Forms; namespace RmiForClient { public partial class Form1 : Form { RmiForMethod.Class1 obj; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.obj.SayHellowWorld(); } private void Form1_Load(object sender, EventArgs e) { System.Runtime.Remoting. RemotingConfiguration.RegisterWellKnownClientType( typeof(RmiForMethod.Class1), "http://localhost:4000/MyServer"); this.obj = new RmiForMethod.Class1(); } } }