VB.Net/Network Remote/Remote Factories

Материал из VB Эксперт
Перейти к: навигация, поиск

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>