Remoting Probleme - Client schreibt nicht in Objekte

JackSparrrow

Grünschnabel
Guten Morgen,

ich habe mein Remoting Projekt noch einmal neu erstellt. Diesmal als Konsole und nur mit dem Code der mir hilft das Remoting nach zu vollziehen.

Dazu habe ich ein Microsoft-Beispiel gefunden, das recht simpel erklärt ist. Mit wenigen Zeilen bekommt man hier Server, Objekt und Client hin.
http://support.microsoft.com/kb/307445/DE/
http://support.microsoft.com/kb/307739/de#appliesto

Aber der Client kann das Objekt nur lesen, nicht aber in die Instanz schreiben.

Wo ist mein Fehler?

ObjektKlasse
Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace ServerClass
{
    public class myRemoteClass : MarshalByRefObject
    {

        public string MyString = "der String ist leer";
        
        public myRemoteClass()
        {
            // 
            // AUFGABE: Konstruktorlogik hier hinzufügen
            // 
        }

        public bool SetString(String sTemp)
        {
            try
            {
                Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
                return sTemp != "";
            }
            catch
            {
                return false;
            }
        }

        public string GetMyString()
        {
            return this.MyString;
        }

        public string SetMyString(string tmp)
        {
            try
            {
                this.MyString = tmp;
                return "OK";
            }
            catch(Exception ex)
            {
                return ex.ToString();
            }
        }
    }
}

RemoteServer(als Konsole)
Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;


namespace RemoteServer
{
    class RemoteServer
    {
        static void Main(string[] args)
        {
            TcpChannel chan = new TcpChannel(8085);
            ChannelServices.RegisterChannel(chan,false);
            RemotingConfiguration.RegisterWellKnownServiceType(
            System.Type.GetType("ServerClass.myRemoteClass, ServerClass"),"RemoteTest",WellKnownObjectMode.SingleCall);

            System.Console.WriteLine("Zum Beenden <EINGABETASTE> drücken...");
            System.Console.ReadLine();
        }
    }
}



Client-Anwendung(als Konsole)
Code:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using ServerClass;

namespace ClientApp
{
    class ClientApp
    {
        static void Main(string[] args)
        {
            try
            {
                TcpChannel chan = new TcpChannel();
                ChannelServices.RegisterChannel(chan, false);

                myRemoteClass obj = (myRemoteClass)Activator.GetObject(typeof(myRemoteClass),
     "tcp://localhost:8085/RemoteTest");
                if (obj == null)
                    System.Console.WriteLine("Server wurde nicht gefunden.");
                else
                    if (obj.SetString("Zeichenfolge wird an Server gesendet."))
                        System.Console.WriteLine("Erfolg: Überprüfen der anderen Konsole zu Bestätigungszwecken.");
                    else
                        System.Console.WriteLine("Senden der Testzeichenfolge ist fehlgeschlagen.");

                Console.WriteLine(obj.SetMyString("das ist ein Test"));
                Console.WriteLine(obj.GetMyString()); // hier sollte nun das ist ein Test ausgegeben werden, tatsächlich bekomme ich aber "Der String ist leer""

                System.Console.WriteLine("Zum Beenden EINGABETASTE drücken...");
                System.Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                System.Console.WriteLine("Zum Beenden EINGABETASTE drücken...");
                System.Console.ReadLine();
            }
        }
    }
}

Ich hoffe das ist für eine Analyse übersichtlicher!
Danke für Eure Hilfe,
Euer J.S.
 
Zurück