Laden...

Remoting Problem (Authentifation failure.)

Erstellt von Hunv vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.626 Views
Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren
Remoting Problem (Authentifation failure.)

Hi Leute

Ich habe folgendes Problem mit den Security-Funktionen des .Net-Frameworks.
Wir haben nen Client und nen Server 😉
Wenn ich lokal auf den Server verbinde läuft alles ohne Probleme, wenn jedoch jemand anders auf meinen Server verbinden soll, kommt folgende Fehlermeldung:


[b]Authentifation failure.[/b]

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

\************** Exception Text **************
System.Runtime.Remoting.RemotingException: Authentication failure ---> System.IO.IOException: Unable to read data from the transport connection: The connection was closed.
   at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateAuthenticatedStream(Stream netStream, String machinePortAndSid)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateAuthenticatedStream(Stream netStream, String machinePortAndSid)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateSocketHandler(Socket socket, SocketCache socketCache, String machinePortAndSid)
   at System.Runtime.Remoting.Channels.SocketCache.CreateSocketHandler(Socket socket, String machineAndPort)
   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint ipEndPoint)
   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()
   at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid, Boolean openNew)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

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 classfield.IServer.connectionCheckLogin(IClient tempcO, String ip, String id, String pwd)
   at networkmodule.networkModule.login(String id, String pwd, String serverIp) in D:\Dokumente und Einstellungen\Kriss1\Eigene Dateien\Visual Studio Projects\#nGame\networkmodule\networkModule.cs:line 253
   at ngame.login.button1_Click(Object sender, EventArgs e) in D:\Dokumente und Einstellungen\Kriss1\Eigene Dateien\Visual Studio Projects\#nGame\ngame\login.cs:line 31
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


\************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ngame
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/ngame.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
networkmodule
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/networkmodule.DLL
----------------------------------------
ClientEngine
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/ClientEngine.DLL
----------------------------------------
System.Management
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll
----------------------------------------
System.Runtime.Remoting
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
mapinformations
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/mapinformations.DLL
----------------------------------------
classField
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/classField.DLL
----------------------------------------
System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

\************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Was kann man dagegen tun?
Mein Freund Google konnte mir leider auch nicht weiter helfen, ich hoffe ihr könnt es.

Visit me @ www.beremote.net

1.378 Beiträge seit 2006
vor 16 Jahren

Ist der andere im lokalen Netzwerk?(VPN oder echt?)
Ist die Firewall richtig konfiguriert?

Lg XXX

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Der Fehler hat wohl nix mit der FW zu tun... ist schließlich ein .Net-Fehler.
Aber trotzdem: FW war ausgeschaltet.

Geht nicht im Lokalen Netzwerk und Hamachi und wohl auch nicht übers Inet.

Edit:
Wenn ich selbst von meinem PC aus über Hamachi an den Server auf meinem PC connecte, gibt es keine Probleme!

Edit2:
Noch ein Nachtrag:
Das ganze passiert, wenn ich
ChannelServices.RegisterChannel(chan, false);
habe - auch lokal (leider gerade eben erst festgestellt)...

Wenn ich
ChannelServices.RegisterChannel(chan, true);
habe, dann funktioniert es lokal und die, die connecten wollen bekommen:


A remote side security requirement was not fulfilled during authentication.
Try increase the ProtectionLevel and/or ImpersonationLevel.
-----------------------------------------------------
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

\************** Exception Text **************
System.Security.Authentication.AuthenticationException: A remote side security requirement was not fulfilled during authentication. Try increasing the ProtectionLevel and/or ImpersonationLevel. ---> System.ComponentModel.Win32Exception: The network logon failed
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.Net.Security.NegoState.ProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.NegotiateStream.AuthenticateAsClient(NetworkCredential credential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowedImpersonationLevel)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateAuthenticatedStream(Stream netStream, String machinePortAndSid)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateSocketHandler(Socket socket, SocketCache socketCache, String machinePortAndSid)
   at System.Runtime.Remoting.Channels.SocketCache.CreateSocketHandler(Socket socket, String machineAndPort)
   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint ipEndPoint)
   at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket()
   at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid, Boolean openNew)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream)
   at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg)

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 classfield.IServer.connectionCheckLogin(IClient tempcO, String ip, String id, String pwd)
   at networkmodule.networkModule.login(String id, String pwd, String serverIp) in D:\Dokumente und Einstellungen\Kriss1\Eigene Dateien\Visual Studio Projects\#nGame\networkmodule\networkModule.cs:line 253
   at ngame.login.button1_Click(Object sender, EventArgs e) in D:\Dokumente und Einstellungen\Kriss1\Eigene Dateien\Visual Studio Projects\#nGame\ngame\login.cs:line 31
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


\************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
ngame
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/ngame.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
networkmodule
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/networkmodule.DLL
----------------------------------------
ClientEngine
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/ClientEngine.DLL
----------------------------------------
System.Management
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll
----------------------------------------
System.Runtime.Remoting
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
mapinformations
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/mapinformations.DLL
----------------------------------------
classField
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/Administrator/Desktop/ngame/bin/Debug/classField.DLL
----------------------------------------
System.Configuration
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

\************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Visit me @ www.beremote.net

3.728 Beiträge seit 2005
vor 16 Jahren
Sicherheitseinstellungen

Hallo Hunv,

das passiert, wenn Server und Client verschiedene Sicherheitseinstellungen verwenden. Wenn der Remoting TCP-Kanal des Servers für Sicherheit konfiguriert ist (secure=true), muss der Client auch so konfiguriert sein.

Probleme gibt es auch, wenn ein Rechner in einer Domäne ist und ein anderer nicht. Innerhalb von ActiveDirectory-Domänen verwendet Remoting standardmäßig Kerberos zur Authentifizierung und bei Peer2Peer-Windows-Netzwerken "nur" NTLM.

Eine funktionierende Remoting-Implementierung, die sowohl mit, als auch ohne Sicherheit arbeitet, findest Du hier: Remoting-Helfer

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Danke für die Antwort, aber ich glaube, dass mir dein Beispielprojekt nicht viel weiter hilft, da wir den Server - soweit ich das einschätzen kann - anders aufgebaut haben.
Der Bereich, auf den es ankommt ist bei uns dieser hier:


public static void serverStart(networkEngine sO, TcpChannel chan, object obj)
        {
            BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
            serverProv.TypeFilterLevel = TypeFilterLevel.Full;

            BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();

            IDictionary props = new Hashtable();
            props["port"] = "10000";
            chan = new TcpChannel(props, clientProv, serverProv);
\===&gt;   ChannelServices.RegisterChannel(chan, true); //Die erwähnte Zeile

            obj = RemotingServices.Marshal(sO, "netEngine.rem");
        }

Oder hab ich nicht richtig geguckt?

Visit me @ www.beremote.net

3.728 Beiträge seit 2005
vor 16 Jahren
Fehler eingrenzen

Du musst den Fehler eingrenzen. Offenbar liegt der Fehler nicht an Deinem Code (da konnte ich zumindest auf den ersten Blick nichts falsches erkennen) sondern an den äußeren Umständen.

Folgende Fragen sollten Dir helfen, den Fehler einzugrenzen:*Unter welchem Betriebssystem läuft der Host-Prozess? *Unter welchem Betriebssystem läuft der Client-Prozess? *Ist der Server-Computer Mitglied einer Active Directory Domäne? *Unter was für einem Benutzerkonto wird der Host-Prozess ausgeführt? *Unter was für einem Benutzerkonto wird der Client-Prozess ausgeführt? *Welche CAS-Berechtigungen hat Host-Assembly? *Könnten evtl. Firewalls den Port 10000 blockieren? *Sind Client und Server im selben Netzwerksegment bzw. werden die Pakete korrekt geroutet?

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Unter welchem Betriebssystem läuft der Host-Prozess?
WinXP Prof SP2 - Sicherheitscenter deaktiviert

Unter welchem Betriebssystem läuft der Client-Prozess?
WinXP Prof SP2 - Sicherheitscenter deaktiviert

Ist der Server-Computer Mitglied einer Active Directory Domäne?
Nein, auch der Client nicht

Unter was für einem Benutzerkonto wird der Host-Prozess ausgeführt?
Administrator

Unter was für einem Benutzerkonto wird der Client-Prozess ausgeführt?
Administrator

Welche CAS-Berechtigungen hat Host-Assembly?
Was genau ist gemeint? Die Einstellungen im Framework? Wenn ja: habe dort nichts verstellt/eingestellt.

Könnten evtl. Firewalls den Port 10000 blockieren?
Nein

Sind Client und Server im selben Netzwerksegment bzw. werden die Pakete korrekt geroutet?
Ja

Visit me @ www.beremote.net

3.728 Beiträge seit 2005
vor 16 Jahren
Passwort

Beide Administrator-Benutzer müssen das selbe Passwort haben. Ist das der Fall?

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Bei dem Auth-Fehler, der ja überall aufritt, ja, da server und client auf dem Selben PC laufen.

Bei dem anderen Fehler, nein.

Visit me @ www.beremote.net

3.728 Beiträge seit 2005
vor 16 Jahren
Mini-Applikation

Hallo Hunv,

es scheint nicht an den CAS-Rechten zu liegen, da Du sonst eine SecurityException bekommen würdest und keine AuthenticationException.

Windows-Authentifizierung ist ohne Domäne generell problematisch, da es keine zentrale Benutzerkontenverwaltung gibt. Wenn Du Windows-Authentifizierung über Netzwerk verwendest, müssen auf allen beteiligten Computern identische Benutzerknoten mit identischen Passwörtern eingerichtet sein. Das ist bereits bei nur drei Computern sehr aufwändig zu pflegen und unübersichtlich. Deshalb möchte ich Dir davon abraten, Windows-Authentifizierung für Deine Anwendungen zu verwenden, wenn die betroffenen Computer nicht in einer Active Directory-Domäne sind.
Trotzdem sollte es natürlich funktionieren, wenn alles korrekt konfiguriert ist. Ich entwickle meine Anwendungen daheim ja auch auf zwei Windows XP Pro Maschinen, ohne Domäne.

Für mich ist es sehr schwierig, Dir an dieser Stelle weiter zu helfen. Ich habe weder Deine Testumgebung noch Deinen Code. Deshalb empfehle ich Dir, eine kleine Mini-Anwendung zu schreiben, um das Problem isoliert zu untersuchen. Du könntest auch den Remoting-Helfer dazu bemühen, da dieser getestet ist und funktionieren sollte. Wenn die Mini-Applikation die selben Fehler erzeugt, liegt es wahrscheinlich nicht am Code, sondern an den Benutzern, Passwörtern oder den Einstellungen der lokalen Sicherheitsrichtlinie. Das ist dann aber Debugging-Arbeit, die Dir niemand abnehmen kann. Vielleicht solltest Du es auch mal auf anderen Maschinen versuchen (oder auf VMs mittels vmware oder Virtual Server).

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Dein Remoting-Helper Funktioniert.

Probiert haben wir das bereits auf diversen Maschinenen und Betriebssystemen (Win 2000, XP Home, XP Prof, Server 2003, Vista) - überall der gleiche Fehler.

Ich werde das jetzt lösen, indem ich zusätzlich eine Socket-Verbindung aufbaue, bei der in einer meiner älteren Anwendungen solche Probleme nicht aufgetaucht sind.
So hab ich nach wie vor die Vorteil der bisherigen Methode, und den/die dämlichen Fehler nicht mehr.
Außerdem kann ich damit ohne viel Aufwand die IP des gegenübers herauskriegen, was sonst eine meiner nächsten Herausforderungen gewesen wäre 😉

Visit me @ www.beremote.net

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Hi.

So, wir sind jetzt weiter... beim nächsten Fehler/Problem 🙁

Wir haben jetzt die Socketverbindung hergestellt, brauchen aber nun trotzdem zusätzlich einen TcpChannel.

Der Fehler ist jetzt wiefolgt eingeschränkt:

  • Die Socketverbindung kann aufgebaut werden und funktioniert in beide Richtungen
  • Die Channelverbindung kann aufgebaut werden, aber dann:
    -- Der Client kann eine Prozedur auf dem Server aufrufen
    -- Der Server kann NICHT Prozeduren auf dem Client aufrufen. Dann kommt folgender Fehler, wenn der Server genau dies machen will.

SerializationException
{"Because of security restrictions, the type classfield.mapInformationClass cannot be accessed."}

Die InnerException lautet:


{"Request failed."}

Method: {System.Runtime.Remoting.Channels.ServerProcessing ProcessMessage(System.Runtime.Remoting.Channels.IServerChannelSinkStack, System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Channels.ITransportHeaders, System.IO.Stream, System.Runtime.Remoting.Messaging.IMessage ByRef, System.Runtime.Remoting.Channels.ITransportHeaders ByRef, System.IO.Stream ByRef)}

Source: "mscorlib"

StackTrace:    
at System.Runtime.Serialization.FormatterServices.nativeGetSafeUninitializedObject(RuntimeType type)
   at System.Runtime.Serialization.FormatterServices.GetSafeUninitializedObject(Type type)

Bei RegisterChannel (auf dem Server) haben wir ensureSecurity auf true gesetzt. Bei False hängt er schon bei der Anfrage des Clients.

Des Weiteren haben wird snk-Keyfiles erstellt und jeder Exe und DLL unseres Programms diese zugewisen, damit sie einen "Strong Name" haben.

Hilft das vielleicht weiter?
Sämtliche Sachen, die ich bei Google finde, beziehen sich immer darauf, dass beim Update vom Framework 1.0 auf 1.1 dieses ensureSecurity neu war und so der Fehler verursacht wurde, aber das ist ja bei uns nicht so...

Visit me @ www.beremote.net

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

keiner eine Idee woran das liegen könnte?

Visit me @ www.beremote.net

3.728 Beiträge seit 2005
vor 16 Jahren
Client-Port

Du musst den Port des TcpChannels auf den Client auf 0 festlegen. Außerdem darfst Du keinen TcpClientChannel verwenden. Es muss ein TcpChannel sein.

Der Server kann natürlich nur Objekte aufrufen, deren Schnittstelle er kennt. Verfügt der Server über die nötigen Schnittstellen-Assemblies?

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

Wenn ich den Port auf dem Client auf 0 setze, bekomme ich den Fehler
Tcp channel url must have a port number: tcp://5.119.238.206:0/netEngine.rem
Erzeugt durch die Zeile


remServer = (IServer)Activator.GetObject(typeof(IServer),
                "tcp://" + ip + ":"
                + "10000"
                + "/netEngine.rem");

Und wenn du mit Schnittstellen-Assemblies eine Art Interface-Klasse meinst, die Server und Client kennen müssen, dann habe ich auch das, ja.

TcpClientChannels konnte ich bei mir im Code nicht finden. Ich benutze überall TcpChannels.

Edit:
Auch an dieser Stelle:
chan = new TcpChannel(0);
ist der Port 0

Visit me @ www.beremote.net

Hunv Themenstarter:in
193 Beiträge seit 2005
vor 16 Jahren

OK - Problem gelöst.

Es ist im Prinzip ein simpler Fehler gewesen... ich hab an einer Stelle die cO-Variable neu gesetzt, was dazu geführt hat, dass der Server mit einem anderen cO-Objekt kommunitiert hat, als das, was auf dem Client in der cO-Variable geladen war.

OK - klingt sehr spanisch darum sag ich es so:
ein cO = new ClientObject(); war zu viel => war also mein Fehler.
... man hat das Zeit gekostet...

Hoffen wir mal, das gleich beim Netzwerktest mit zwei Verbindungen alles glatt läuft 🙂

Visit me @ www.beremote.net