.NETリモーティング(IPC版)サーバ
(続きです)
サーバ側の実装です。ServerForm_Loadメソッドで、チャネル作成、イベント登録をしています。チャネルは"ipc://myserver/mymessage"という名前で登録しています。クライアントから通信があると、OnCalledメソッドが呼ばれます。
チャネルの名前は、もし既に同じ名前で起動しているサーバが存在すると、エラーが発生しました。
複数クライアントから同時に通信があると、OnCalledメソッドが各クライアントごとに呼ばれ、並列処理をしているようです。
public partial class ServerForm : Form { public ServerForm() { InitializeComponent(); } private void ServerForm_Load(object sender, EventArgs e) { // サーバチャネル作成 // System.Runtime.Remotingを参照設定に追加しておくこと // 1プロセスに1つのみ作成可能 IpcServerChannel serverChannel = new IpcServerChannel("myserver"); ChannelServices.RegisterChannel(serverChannel, true); // イベントを登録 // 暗黙的に上記で作成したチャネルに登録される MyMessage myMessage = new MyMessage(); myMessage.callEvent += OnCalled; RemotingServices.Marshal(myMessage, "mymessage", typeof(MyMessage)); } private MyResponse OnCalled(MyRequest request) { // リクエストを取得 tbRequest.Text += request.data + "\r\n"; // レスポンスを設定 MyResponse response = new MyResponse(); response.data = string.Format(tbResponse.Text, request.data); // 複数クライアントからの同時アクセスを確認するためスリープ Thread.Sleep(Convert.ToInt32(numTime.Value) * 1000); return response; } private void btnClear_Click(object sender, EventArgs e) { tbRequest.Text = string.Empty; } }