VB.Net/Network Remote/Remote Factories
Acquire Remote Object from Remote Object Factory
<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
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
</source>