VB.Net/Network Remote/Remote Basics — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 12:45, 26 мая 2010
Call remote object method to Get and set variable
///////////////////////////////////general.vb
// Compile: vbc /target:library general.vb
Imports System
Public Class MyRemoteObject
Inherits MarshalByRefObject
Private myvalue As Integer
Public Sub New()
Console.WriteLine("MyRemoteObject.Constructor: New Object created")
End Sub "New
Public Sub New(ByVal startvalue As Integer)
Console.WriteLine("MyRemoteObject.Constructor: .ctor called with {0}", _
startvalue)
myvalue = startvalue
End Sub
Public Sub setValue(ByVal newval As Integer)
Console.WriteLine("MyRemoteObject.setValue(): old {0} new {1}", _
myvalue, newval)
myvalue = newval
End Sub
Public Function getValue() As Integer
Console.WriteLine("MyRemoteObject.getValue(): current {0}", _
myvalue)
Return myvalue
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)
RemotingConfiguration.RegisterActivatedClientType( _
GetType(MyRemoteObject), "http://localhost:1234/MyServer")
Console.WriteLine("Client.Main(): Creating first object")
Dim obj1 As New MyRemoteObject()
obj1.setValue(42)
Console.WriteLine("Client.Main(): Creating second object")
Dim obj2 As New MyRemoteObject()
obj2.setValue(11)
Console.WriteLine("Obj1.getValue(): {0}", obj1.getValue())
Console.WriteLine("Obj2.getValue(): {0}", obj2.getValue())
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()
Console.WriteLine("ServerStartup.Main(): Server started")
Dim chnl As New HttpChannel(1234)
ChannelServices.RegisterChannel(chnl,false)
RemotingConfiguration.ApplicationName = "MyServer"
RemotingConfiguration.RegisterActivatedServiceType( _
GetType(MyRemoteObject))
Console.ReadLine()
End Sub
End Module
Validate Data remotely
///////////////////////////////////general.vb
// Compile: vbc /target:library general.vb
Imports System
Public Interface IEmployeeManager
Function getEmployee(ByVal id As Integer) As Employee
Function validate(ByVal cust As Employee) As ValidationResult
End Interface
<Serializable()> _
Public Class ValidationResult
Public Sub New(ByVal ok As Boolean, ByVal msg As String)
Console.WriteLine("ValidationResult: Object created")
Me.Ok = ok
Me.ValidationMessage = msg
End Sub "New
Public Ok As Boolean
Public ValidationMessage As String
End Class
<Serializable()> _
Public Class Employee
Public FirstName As String
Public LastName As String
Public DateOfBirth As DateTime
Public Sub New()
Console.WriteLine("Employee.constructor: Object created")
End Sub "New
Public Function getAge() As Integer
Dim tmp As TimeSpan = DateTime.Today.Subtract(DateOfBirth)
Return tmp.Days \ 365 " rough estimation
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)
Dim mgr As IEmployeeManager = CType(Activator.GetObject( _
GetType(IEmployeeManager), "http://localhost:1234/EmployeeManager.soap"), _
IEmployeeManager)
Dim cust As New Employee()
cust.FirstName = "James"
cust.LastName = "Band"
cust.DateOfBirth = New DateTime(1999, 5, 12)
Dim res As ValidationResult = mgr.validate(cust)
Console.WriteLine("Validation result for {0} {1}" & vbCrLf & _
"-> {2}: {3}", cust.FirstName, cust.LastName, res.Ok.ToString(), _
res.ValidationMessage)
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
Class EmployeeManager
Inherits MarshalByRefObject
Implements IEmployeeManager
Public Sub New()
Console.WriteLine("EmployeeManager: Object created")
End Sub
Public Function getEmployee(ByVal id As Integer) As Employee _
Implements IEmployeeManager.getEmployee
Dim tmp As New Employee()
tmp.FirstName = "James"
tmp.LastName = "Band"
tmp.DateOfBirth = New DateTime(1989, 7, 4)
Return tmp
End Function
Public Function validate(ByVal cust As Employee) As ValidationResult _
Implements IEmployeeManager.validate
Dim age As Integer = cust.getAge()
Console.WriteLine("EmployeeManager.validate() for {0} aged {1}", _
cust.FirstName, age)
If cust.FirstName Is Nothing Or cust.FirstName.Length = 0 Then
Return New ValidationResult(False, "Firstname missing")
End If
If cust.LastName Is Nothing Or cust.LastName.Length = 0 Then
Return New ValidationResult(False, "Lastname missing")
End If
If age < 0 Or age > 120 Then
Return New ValidationResult(False, "Employee must be younger than 120 years")
End If
Return New ValidationResult(True, "Validation succeeded")
End Function
End Class
Module ServerStartup
Sub Main()
Console.WriteLine("ServerStartup.Main(): Server started")
Dim chnl As New HttpChannel(1234)
ChannelServices.RegisterChannel(chnl,false)
RemotingConfiguration.RegisterWellKnownServiceType( _
GetType(EmployeeManager), _
"EmployeeManager.soap", _
WellKnownObjectMode.Singleton)
Console.ReadLine()
End Sub
End Module
Your first Remote client and server
///////////////////////////////RemoteObject: general.vb
// Complie: vbc /target:library general.vb
Public Interface IEmployeeManager
Function getEmployee(ByVal id As Integer) As Employee
End Interface
<Serializable()> _
Public Class Employee
Public FirstName As String
Public LastName As String
Public DateOfBirth As DateTime
Public Sub New()
Console.WriteLine("Employee.constructor: Object created")
End Sub "New
Public Function getAge() As Integer
Console.WriteLine("In getAge Method")
Return 30
End Function
End Class
/////////////////////////////test.vb
// Complie: 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
Imports System.Runtime.Remoting.Messaging
Module Client
Sub Main()
Dim channel As New HttpChannel()
ChannelServices.RegisterChannel(channel,false)
Dim mgr As IEmployeeManager = CType(Activator.GetObject( _
GetType(IEmployeeManager), "http://localhost:1234/EmployeeManager.soap"), _
IEmployeeManager)
Console.WriteLine("Client.Main(): Reference to EmployeeManager acquired")
Dim cust As Employee = mgr.getEmployee(4711)
Dim age As Integer = cust.getAge()
Console.WriteLine("Client.Main(): Employee {0} {1} is {2} years old.", _
cust.FirstName, cust.LastName, age)
Console.ReadLine()
End Sub
End Module
///////////////////////////server.vb
// Complie: 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
Class EmployeeManager
Inherits MarshalByRefObject
Implements IEmployeeManager
Public Sub New()
Console.WriteLine("EmployeeManager.constructor: Object created")
End Sub
Public Function getEmployee(ByVal id As Integer) As Employee _
Implements IEmployeeManager.getEmployee
Console.WriteLine("EmployeeManager.getEmployee): Called")
Dim tmp As New Employee()
tmp.FirstName = "James"
tmp.LastName = "Band"
tmp.DateOfBirth = New DateTime(1007, 7, 4)
Console.WriteLine(("EmployeeManager.getEmployee(): Returning " & _
"Employee-Object"))
Return tmp
End Function
End Class
Module ServerStartup
Sub Main()
Console.WriteLine("ServerStartup.Main(): Server started")
Dim chnl As New HttpChannel(1234)
ChannelServices.RegisterChannel(chnl,false)
RemotingConfiguration.RegisterWellKnownServiceType( _
GetType(EmployeeManager), _
"EmployeeManager.soap", _
WellKnownObjectMode.Singleton)
Console.ReadLine()
End Sub
End Module