VB.Net/Network Remote/Remote Life Time
Initialize Lifetime Service (bugs)
<source lang="vbnet"> ///////////////////////////////////general.vb // Compile: vbc /target:library general.vb Imports System Public Interface IRemoteObject
Sub setValue(ByVal newval As Integer) Function getValue() As Integer
End Interface Public Interface IRemoteFactory
Overloads Function getNewInstance() As IRemoteObject Overloads Function getNewInstance(ByVal initvalue As Integer) As IRemoteObject
End Interface
///////////////////////////////////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 Module Client
Sub Main() Dim channel As New HttpChannel() ChannelServices.RegisterChannel(channel,false) Dim fact As IRemoteFactory = CType(Activator.GetObject( _ GetType(IRemoteFactory), _ "http://localhost:1234/factory.soap"), _ IRemoteFactory) Dim obj1 As IRemoteObject = fact.getNewInstance()
" System.Threading.Thread.Sleep(1000)
Console.WriteLine("call remote method") Try obj1.setValue(42) Catch e As Exception Console.WriteLine("Client.Main(). EXCEPTION " + vbCrLf + e.Message) End Try 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.Runtime.Remoting.Lifetime Class MyRemoteObject
Inherits MarshalByRefObject Implements IRemoteObject Private myvalue As Integer
Public Overrides Function InitializeLifetimeService() As Object Dim lease As ILease = CType(MyBase.InitializeLifetimeService(), ILease) If lease.CurrentState = LeaseState.Initial Then lease.InitialLeaseTime = TimeSpan.FromMilliseconds(10) lease.SponsorshipTimeout = TimeSpan.FromMilliseconds(10) lease.RenewOnCallTime = TimeSpan.FromMilliseconds(10) End If Return lease End Function
Public Sub New() myvalue = 0 End Sub Public Sub New(ByVal startvalue As Integer) myvalue = startvalue End Sub Public Sub setValue(ByVal newval As Integer) _ Implements IRemoteObject.setValue myvalue = newval End Sub Public Function getValue() As Integer _ Implements IRemoteObject.getValue Return myvalue End Function
End Class Class MyRemoteFactory
Inherits MarshalByRefObject Implements IRemoteFactory Public Function getNewInstance() As IRemoteObject _ Implements IRemoteFactory.getNewInstance Console.WriteLine("create object with no argment") Return New MyRemoteObject() End Function Public Function getNewInstance(ByVal initvalue As Integer) As IRemoteObject _ Implements IRemoteFactory.getNewInstance Console.WriteLine("create object with argument") Return New MyRemoteObject(initvalue) End Function
End Class Module ServerStartup
Sub Main() LifetimeServices.LeaseManagerPollTime = TimeSpan.FromMilliseconds(10) Dim chnl As New HttpChannel(1234) ChannelServices.RegisterChannel(chnl,false) RemotingConfiguration.RegisterWellKnownServiceType( _ GetType(MyRemoteFactory), _ "factory.soap", _ WellKnownObjectMode.Singleton) Console.WriteLine("Server started") Console.ReadLine() End Sub
End Module
</source>