Autor Beitrag
golgol
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 58

Win XP Prof. / Linux
C# (VS 2005)
BeitragVerfasst: Do 31.01.08 14:50 
Hi zusammen,

ich bin auf ein seltsames Problem gestoßen, vieleicht kann mir jemand nen Tipp geben: Ich habe eine Client-/Serveranwendung hier in der Firma geschrieben, sie basiert auf Remoting. Die Objekte werden als SAO Singleton erzeugt. Da die Anwendung hinter einer Firmenfirewall ist und die Daten nicht krisch sind, gibt es keine Authentifiezierung (es wird TCP verwendet).
Von den momentan im Einsatz befindlichen PCs kann ohne weitere Fehler auf die Dienste zugegriffen werden. Nun hat aber ein College ein neues Notebook und bekommt nun immer folgenden Fehler:

Zitat:
System.Security.Authentication.InvalidCredentialException: Der Server hat die Clientanmeldeinformationen zurückgewiesen. ---> System.ComponentModel.Win32Exception: Der Anmeldeversuch ist fehlgeschlagen
--- Ende der internen Ausnahmestapelüberwachung ---

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


Ich habe schon im Internet gesucht aber die Probleme, die bei anderen Benutzern aufgetreten zu sein schein haben fast immer was mit Benutzerauthentifizierung und/oder SOAP zu tun - aber das kommt hier gar nicht zum Einsatz.
Achja: Ich habe schon geschaut, ob es an der Firewall oder ähnlichen Diensten auf dem Client liegen kann, aber das kann ich glaube ich ausschließen.
golgol Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 58

Win XP Prof. / Linux
C# (VS 2005)
BeitragVerfasst: Mi 27.02.08 13:10 
Beim Stöbern im Forum bin ich grade über diesen etwas älteren Thread von mir gestoßen: Das Problem hat sich in der Zwischenzeit erledigt, da ich den Fehler gefunden habe. Falls jemand anderes das selbe Problem haben sollte oder eventuell mal bekommt hier kurz der Kern des Problems:

Alle PCs waren im Firmennetzwerk und in der Domain angemeldet. Der besagte Laptop befnd sich zwar im Firmennetzwerk, aber er hatte keine Domain. Bei der Anfrage überprüfte der Server dann, ob es sich um ein Domainmitglied handelt und hat dann automatisch die Anfrage abegelehnt, das der Laptop eben kein Mitglied war. Es handelt sich dabei so wie ich das verstanden habe um eine Standardprozedur bei dieser Form der Anwendung. Ich habe es mir bei der Lösung leicht gemacht - die Regeln in der Firma sagen, dass auf die Bereitgestellten Dienste nur von entsprechenden Firmen-PCs aus genutzt werden dürfen, die sich dazu innerhalb der Domaine befinden sollen. Tja - der Laptop musst dann der Domaine beitreten und schwupps lief die Anwendung wie gewohnt.

Falls jemand nicht den Luxus hat, dass der Chef einem die Arbeit abnimmt, hier ein kleiner Lösungsansatz, der zwar nicht schön ist aber funktioniert. Es gibt definitiv bessere Lösungen, die das ganze vor allem sicherer machen, aber über diese Lösung bin ich gestolpert und wollte sie kurz erwähnen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
TcpChannel tcpCnl;

Hashtable properties = new Hashtable();
properties["name"] = "Mein Server";
properties["port"] = iPort;
properties["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
/* schaltet die Sicherheitsabfrage ab -> ohne Domainüberprüfung */
properties["secure"] = false

tcpCnl= new TcpChannel(properties, nullnull);