VB.Net by API/System.Runtime.Remoting.Channels/ChannelServices
ChannelServices.RegisterChannel
<source lang="vbnet"> ///////////////////////////////////general.vb // Compile: vbc /target:library general.vb Imports System Imports System.Runtime.Remoting.Messaging Public MustInherit Class BaseRemoteObject
Inherits MarshalByRefObject Public MustOverride Sub setValue(ByVal newval As Integer) Public MustOverride Function getValue() As Integer
End Class
///////////////////////////////////test.vb // Compile: vbc /t:exe /r:general.dll test.vb Imports System Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels.Http Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Proxies Module Client
Delegate Sub SetValueDelegate(ByVal value As Integer) Sub Main() Dim start As DateTime = System.DateTime.Now Dim channel As New HttpChannel() ChannelServices.RegisterChannel(channel,false) Dim obj As BaseRemoteObject = CType(Activator.GetObject( _ GetType(BaseRemoteObject), _ "http://localhost:1234/MyRemoteObject.soap"), BaseRemoteObject)
Dim svDelegate As New SetValueDelegate(AddressOf obj.setValue) Dim svAsyncres As IAsyncResult = svDelegate.BeginInvoke(42, Nothing, _ Nothing) svDelegate.EndInvoke(svAsyncres) Dim tmp As Integer = obj.getValue() Console.WriteLine(tmp) Dim finished As DateTime = System.DateTime.Now Dim duration As TimeSpan = finished.Subtract(start)
End Sub
End Module
///////////////////////////////////server.vb // vbc /target:exe /r:general.dll server.vb Imports System Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels.Http Imports System.Runtime.Remoting.Channels Imports System.Threading
Class MyRemoteObject
Inherits BaseRemoteObject Private myvalue As Integer Public Sub New() End Sub Public Overrides Sub setValue(ByVal newval As Integer) Console.WriteLine("old {0} new {1}", myvalue, newval) Thread.Sleep(5000) myvalue = newval End Sub
Public Overrides Function getValue() As Integer Return myvalue End Function
End Class Module ServerStartup
Sub Main() Dim chnl As New HttpChannel(1234) ChannelServices.RegisterChannel(chnl,false) RemotingConfiguration.RegisterWellKnownServiceType( _ GetType(MyRemoteObject), "MyRemoteObject.soap", _ WellKnownObjectMode.Singleton) Console.ReadLine() End Sub
End Module
</source>