tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
3680
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Tach zusammen,
    also habe das Problem das bei beinem Clientobject.cs (siehe Tutorial unter Clientklasse)
    zweimal dieser Fehler kommt:
    Code :
    1
    
    Der Typ- oder Namespacename "client" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?)
    Dieser kommt bei:
    Code :
    1
    
    private static [B]client[/B] myParent;
    und:
    Code :
    1
    2
    3
    4
    5
    6
    
       public ClientObject([B]client [/B]parent, string mynick)
            {
                myParent = parent;
                nick = mynick;
                guid = Guid.NewGuid();
            }
    Und bei Serverobject.cs (siehe Tutorial unter Serverklasse)
    kommt dieser Fehler:
    Code :
    1
    
    Der Name "client" ist im aktuellen Kontext nicht vorhanden.
    und zwar bei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
            public bool _sendText(string text)
            {
                text = DateTime.Now.ToShortTimeString() + " " + [B]client[/B]._nick + @"\> " + text;
                // ausgabe ein wenig verschönern
                foreach (IClient user in _clients.Values)
                {
                    user._setText(text); // text wird übermittelt
                }
                return true;
            }

    Schonmal Danke für die Hilfe
    Geändert von Alaitoc (08.04.08 um 11:23 Uhr)
     

  2. #2
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Achja das Tutorial ist hier zu finden:

    http://www.tutorials.de/forum/net-tu...hatserver.html
     

  3. #3
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Hm...soweit gelöst...nur nu kommt:

    Code :
    1
    
    Auf den Typ System.Runtime.Remoting.ObjRef kann aufgrund von Sicherheitseinschränkungen nicht zugegriffen werden.

    bei:

    Code :
    1
    
    remServer._login(myClient);
     

  4. #4
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Denke es könnte vll. an
    Code :
    1
    
    ChannelServices.RegisterChannel(myChannel,false);
    liegen aber wenn ich es auf tru setzte funtzts auch net...wie stell ich den die Sicherheit da genau aus?
     

  5. #5
    moster moster ist offline Grünschnabel
    Registriert seit
    Feb 2009
    Beiträge
    3
    hi zusammen, habe dasselbe problem wie Alaitoc:
    in der Zeile
    Code :
    1
    
    remServer._login(myClient);
    bekomme ich dieselbe exception.
    nun hab ich aber gesehen, dass in der vorangestellten zeile
    Code :
    1
    2
    
    remServer = (IServer) Activator.GetObject(typeof(IServer), "tcp://" 
    + txtIP.Text.Trim() + ":" + txtPort.Text.Trim() + "/chat.rem");
    beim debuggen folgender hinweis kommt:

    System.Runtime.Remoting.RemotingException: Remoting cannot find field '__identity' on type 'System.MarshalByRefObject'.
    Server stack trace:
    at System.Object.GetFieldInfo(String typeName, String fieldName)
    at System.Object.FieldGetter(String typeName, String fieldName, Object& val)
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

    Exception rethrown at [0]:
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at System.Object.FieldGetter(String typeName, String fieldName, Object& val)
    at System.RuntimeFieldHandle.GetValue(Object instance, RuntimeTypeHandle fieldType, RuntimeTypeHandle declaringType, Boolean& domainInitialized)
    at System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency)
    at System.Reflection.RtFieldInfo.GetValue(Object obj)
    at Microsoft.Office.Tools.Debugger.Tools.TryCreateDebuggerItem(MemberInfo member, Object target, __Item& item)
    vermag irgendjemand da draussen ein licht in mein dunkel zu bringen ? Alaitoc, hast du das noch lösen können ?
    danke schonmal vorweg und liebe grüsse
     

  6. #6
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Ich hab es eher durch Zufall hinbekommen und mit etwas Hilfe von nem Kollegen, jedoch kann ich grad nicht nachschauen...weiß nurnoch das ich mich schonmal nicht an das Tutorial gehalten hatte..

    Sobald ich in der Lage bin werde ich nachschauen.

    MfG Alaitoc
     

  7. #7
    moster moster ist offline Grünschnabel
    Registriert seit
    Feb 2009
    Beiträge
    3
    Oh, das wäre super. Ich stehe momentan ziemlich am Berg.
     

  8. #8
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Tut mir leid,
    dass ich erst jetzt antworte...hatte viel zu tun und habe leider das Projekt nicht mehr gefunden...jedoch hab ich dort einfach den TCPClient und TCPListener benutzt.
    Falls ich Zeit habe, kann ich mal schauen ob ich etwas Code zusammengebastelt kriege...versuch am besten Mal einfach eine Verbindung herzustellen.

    Falls du das hingekriegt hast, musste immer deinen Text in Bytes umwandeln und dann versenden und der Empfänger muss sie dann zurückwandeln..

    Ich meld mich wieder, sobald ich was habe.

    MfG Alaitoc
     

  9. #9
    moster moster ist offline Grünschnabel
    Registriert seit
    Feb 2009
    Beiträge
    3
    ja das versuch ich mal, danke vorerst.
     

  10. #10
    Alaitoc Alaitoc ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    115
    Ziemlich verspätet,
    aber hier mal trotzdem das Projekt...leider in VB.net...aber einfach mal in nen Converter zu C# schmeißen, falls du das in C# brauchst.

    Musste die Datei leider doppelt verpacken, weil man hier kein *.rar hochladen kann.

    MfG Alaitoc
    Angehängte Dateien Angehängte Dateien
     

  11. #11
    Solved Tutorials.de Gastzugang
    Hi,

    nachdem ich zufällig auf das selbe Tutorial stoß und den selben Fehler erfuhr, habe ich es in C# zum laufen bekommen. Dem Autor wird es wohl wenig nutzen, sondern eher den Leuten die diesen Thread finden.

    Hier die Lösung:

    Umschreiben auf Serverseite:

    private void startServer()
    {
    txtPort.Enabled = false; // damit nicht geändert wird während der server läuft

    rtbLog.Text += "server wird gestartet...\r\n";

    BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
    provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
    IDictionary props = new Hashtable();
    props["port"] = int.Parse(txtPort.Text.Trim());

    myChan = new TcpChannel(props, null, provider);

    rtbLog.Text += "TcpChannel wird registriert..\r\n";

    ChannelServices.RegisterChannel(myChan, true);

    RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerObject), "chat.rem", WellKnownObjectMode.Singleton);

    rtbLog.Text += "fertig!\r\nServer ist gestartet und lauscht am Port " + txtPort.Text;
    }

    und auf Clientseite:

    private void connect()
    {
    txtNickname.Enabled = false;
    txtIP.Enabled = false;
    txtPort.Enabled = false;

    BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
    provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
    IDictionary props = new Hashtable();
    props["port"] = 0;

    myChannel = new TcpChannel(props, null, provider);
    ChannelServices.RegisterChannel(myChannel, true);

    myClient = new ClientObject(this, txtNickname.Text);

    remServer = (IServer)Activator.GetObject(typeof(IServer), "tcp://" + txtIP.Text.Trim() + ":" + txtPort.Text.Trim() + "/chat.rem");
    remServer._login(myClient);
    }

    Dies hat zusätzlich den Vorteil nichtmehr die veraltete Methode "ChannelServices.RegisterChannel(Channel)" zu benutzen.

    Viel Spaß am Tutorial für alle suchenden.
     

  12. #12
    qixx qixx ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    22
    Zitat Zitat von Solved Beitrag anzeigen
    Hi,

    nachdem ich zufällig auf das selbe Tutorial stoß und den selben Fehler erfuhr, habe ich es in C# zum laufen bekommen. Dem Autor wird es wohl wenig nutzen, sondern eher den Leuten die diesen Thread finden.

    Hier die Lösung:

    Umschreiben auf Serverseite:

    private void startServer()
    {
    txtPort.Enabled = false; // damit nicht geändert wird während der server läuft

    rtbLog.Text += "server wird gestartet...\r\n";

    BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
    provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
    IDictionary props = new Hashtable();
    props["port"] = int.Parse(txtPort.Text.Trim());

    myChan = new TcpChannel(props, null, provider);

    rtbLog.Text += "TcpChannel wird registriert..\r\n";

    ChannelServices.RegisterChannel(myChan, true);

    RemotingConfiguration.RegisterWellKnownServiceType(typeof(ServerObject), "chat.rem", WellKnownObjectMode.Singleton);

    rtbLog.Text += "fertig!\r\nServer ist gestartet und lauscht am Port " + txtPort.Text;
    }

    und auf Clientseite:

    private void connect()
    {
    txtNickname.Enabled = false;
    txtIP.Enabled = false;
    txtPort.Enabled = false;

    BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
    provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
    IDictionary props = new Hashtable();
    props["port"] = 0;

    myChannel = new TcpChannel(props, null, provider);
    ChannelServices.RegisterChannel(myChannel, true);

    myClient = new ClientObject(this, txtNickname.Text);

    remServer = (IServer)Activator.GetObject(typeof(IServer), "tcp://" + txtIP.Text.Trim() + ":" + txtPort.Text.Trim() + "/chat.rem");
    remServer._login(myClient);
    }

    Dies hat zusätzlich den Vorteil nichtmehr die veraltete Methode "ChannelServices.RegisterChannel(Channel)" zu benutzen.

    Viel Spaß am Tutorial für alle suchenden.
    VIELEN DANK!

    Das hat mich "gerettet". Sorry, dass ich den Thread nochmal
    ausgegraben habe.


    MfG
    qixx
     

Ähnliche Themen

  1. .Net-Rechte Probleme bei Remoting
    Von Xo-mate im Forum .NET Web und Kommunikation
    Antworten: 0
    Letzter Beitrag: 17.01.08, 12:52
  2. Remoting Probleme - Client schreibt nicht in Objekte
    Von JackSparrrow im Forum .NET Web und Kommunikation
    Antworten: 0
    Letzter Beitrag: 13.06.07, 08:19
  3. Problem bei einem Tutorial (remoting chat mit c#)
    Von marcelz im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 03.10.05, 23:45
  4. .NET Remoting Chat [Tutorial] über Internet betreiben
    Von Asterix-Ac im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 01.05.05, 21:50