サーバー側 tcp ポート 8000 番を使ってリモートプロシージャコールを行ってみた例のメモ。
3つのプロジェクトを作ります。
- RemoteClass プロジェクト (呼び出される処理)
- RemoteServer プロジェクト (待ち受けをするサーバープロセス)
- RemoteClient プロジェクト (呼び出す側のプロセス)
コード例は以下。詳細な説明は割愛(ぇ
-
RemoteClass プロジェクトの内容
Public Class RemoteClass Inherits MarshalByRefObject Private Shared _count As Integer Public Function Method1(a As Integer) As Integer RemoteClass._count += a Console.WriteLine("Server side output: {0}", _count.ToString) Return _count End Function End Class
-
RemoteServer プロジェクトの内容。
(RemoteClass プロジェクトと System.Runtime.Remoting を参照し、ルート名前空間の名前を同じ名前にします)Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Module Module1 Sub Main() ChannelServices.RegisterChannel(New TcpChannel(8000), False) RemotingConfiguration.RegisterWellKnownServiceType( GetType(RemoteClass), "MyAPP", WellKnownObjectMode.SingleCall) Console.WriteLine("Server Start") Console.ReadLine() Console.WriteLine("Server Stop") End Sub End Module
-
RemoteClient プロジェクトの内容。
(RemoteClass プロジェクトと System.Runtime.Remoting を参照し、ルート名前空間の名前を同じ名前にします)Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Module Module1 Sub Main() ChannelServices.RegisterChannel(New TcpChannel(), False) Dim remoteClass = CType(Activator.GetObject(GetType(RemoteClass), "tcp://localhost:8000/MyApp"), RemoteClass) Dim result = remoteClass.Method1(1) Console.WriteLine("Client side output {0}", result) Console.ReadLine() End Sub End Module