Mega Code Archive

 
Categories / VB.Net / Network Remote
 

Acquire Remote Object from Remote Object Factory

///////////////////////////////////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 Public Class MyRemoteObject     Inherits MarshalByRefObject     Implements IRemoteObject     Private myvalue As Integer     Public Sub New()     End Sub 'New     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 Public Class MyRemoteFactory     Inherits MarshalByRefObject     Implements IRemoteFactory     Public Sub New()     End Sub     Public Function getNewInstance() As IRemoteObject _     Implements IRemoteFactory.getNewInstance         Return New MyRemoteObject()     End Function     Public Function getNewInstance(ByVal initvalue As Integer) As IRemoteObject _     Implements IRemoteFactory.getNewInstance         Return New MyRemoteObject(initvalue)     End Function 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 Module Client     Sub Main()         Dim channel As New HttpChannel()         ChannelServices.RegisterChannel(channel,false)         Console.WriteLine("Client.Main(): Creating factory")         Dim fact As IRemoteFactory = CType(Activator.GetObject( _             GetType(IRemoteFactory), _             "http://localhost:1234/factory.soap"), _             IRemoteFactory)         Console.WriteLine("Client.Main(): Acquiring first object from factory")         Dim obj1 As IRemoteObject = fact.getNewInstance()         obj1.setValue(42)         Console.WriteLine("Client.Main(): Acquiring second object from factory")         Dim obj2 As IRemoteObject = fact.getNewInstance(47)         Console.WriteLine("Obj1.getValue(): {0}", obj1.getValue())         Console.WriteLine("Obj2.getValue(): {0}", obj2.getValue())         Console.ReadLine()     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 Module ServerStartup     Sub Main()         Dim chnl As New HttpChannel(1234)         ChannelServices.RegisterChannel(chnl,false)         RemotingConfiguration.RegisterWellKnownServiceType( _             GetType(MyRemoteFactory), _             "factory.soap", _             WellKnownObjectMode.Singleton)         Console.WriteLine("ServerStartup.Main(): Server started")                  Console.ReadLine()     End Sub End Module