Hallo,
danke schon mal für deine große Hilfe und sorry für manche dummen Fragen, ist leider komplettes Neuland für mich..
Habe aber trotzdem das ganze mal mit einem Console Project als Server gemacht.
Das ist der Server:
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp
Imports Remote
Public Class Main
Const DefaultPort As Integer = 12345
' name of the well known object
Const ObjectName As String = "RemotingClass.Instance"
Public Shared Sub Main(ByVal args() As String)
ChannelServices.RegisterChannel(New TcpChannel(DefaultPort))
RemotingConfiguration.RegisterWellKnownServiceType(GetType( _
RemotingClass), ObjectName, WellKnownObjectMode.Singleton)
Console.WriteLine("Server is running...")
Console.ReadLine()
Console.WriteLine("Server is shutting down...")
End Sub
End Class RemotingClass.vb in einer neue Klassenbibliothek Remote.vbproj
Imports System
Imports System.ComponentModel
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp
<Serializable()> _
Public Class RemotingClass
Inherits System.MarshalByRefObject
Public Overrides Function InitializeLifetimeService() As Object
Return Nothing
End Function
Const DefaultPort As Integer = 12345
' name of the well known object
Const ObjectName As String = "RemotingClass.Instance"
Private m_SharedText As String
Private Shared s_dx As RemotingClass
Public Shared Sub InitClient()
ChannelServices.RegisterChannel(New TcpChannel)
s_dx = CType(Activator.GetObject(GetType(RemotingClass), String.Format( _
"tcp://localhost:{0}/{1}", DefaultPort, ObjectName)), RemotingClass)
End Sub
Public Property SharedText() As String
Get
SharedText = m_SharedText
End Get
Set(ByVal Value As String)
m_SharedText = Value
End Set
End Property
Public Shared ReadOnly Property Instance() As RemotingClass
Get
Return s_dx
End Get
End Property
Private Sub New()
s_dx = Me
End Sub
End Class Dann noch mein Client:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Remote.RemotingClass.InitClient()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
Label1.Text = Remote.RemotingClass.Instance.SharedText
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Remote.RemotingClass.Instance.SharedText = TextBox1.Text
End Sub Was würdest du da noch verbessern, gehen würde es so.
Was mich aber noch bisschen stört ist, dass beim Client.exe immer auch die ganzen Assemblies dabei sein müssen, wenn ich ihn aufrufe, da er ja sonst Remote.RemotingClass.InitClient() nicht findet. Kann man das auch irgendwie aus der RemotingClass herausziehen und direkt im Clienten einbauen.
Weiterhin würde mich noch interessieren, ob man so was auch ohne shared properties realisieren kann?
Danke!! |