Laden...

domänenunabhängiges Remoting...

Erstellt von rock4k vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.070 Views
R
rock4k Themenstarter:in
39 Beiträge seit 2008
vor 13 Jahren
domänenunabhängiges Remoting...

Hallo,

ich brauche vielleicht wieder einmal nur einen Tipp.

Ich habe eine Anwendung (Server/Client) die per Remoting per TCP/IP kommuniziert. Wir haben in der Firma eine Domäne. Der Server läuft auf einer Maschine die dieser Domäne zugeordnet ist.

Jetzt haben wir das Problem, dass Clients, die sich nicht in der Domäne befinden, mit dem Server kommunizieren sollen (müssen). Der Fehler liegt logischerweise in der Authentifizierung.

Nachdem ich nun schon viele viele Artikel zu Remoting gelesen habe und auch viele Tests ausprobiert habe, so habe ich noch keine Lösung für diese Problem.

Diese Einstellung funktioniert auch nicht:

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, null, null);

Vielen Dank für eure Hilfe.

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

ich bin mir nicht sicher, ob das TypeFilterLevel wirklich in die Properties muss, oder eigentlich in einen ServerSink.

mfg
serial

3.728 Beiträge seit 2005
vor 13 Jahren
Remoting ohne Sicherheit

Hallo rock4k,

wie serial bereits angemerkt hat, sollte der TypeFilterLevel auf den BinaryFormatter und nicht auf den Channel direkt angewendet werden.

Wenn Du den Server wie folgt konfigurierst, sollte es auch ohne Domäne klappen:


// Konfiguration für den TCP-Kanal erstellen
System.Collections.IDictionary channelSettings = new System.Collections.Hashtable();
channelSettings["name"] = "MeinServer";
channelSettings["port"] = iPort;
channelSettings["secure"] = false;

// Binäre Serialisierung von komplexen Objekten aktivieren
BinaryServerFormatterSinkProvider serverFormatter = new BinaryServerFormatterSinkProvider();
serverFormatter.TypeFilterLevel = TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientFormatter = new BinaryClientFormatterSinkProvider();

// Neuen TCP-Kanal erzeugen
TcpChannel channel = new TcpChannel(channelSettings, clientFormatter, serverFormatter);

// Sicherstellen, dass vollständige Ausnahmeinformationen übertragen werden
if (RemotingConfiguration.CustomErrorsMode != CustomErrorsModes.Off)
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;

Hier noch das Gegenstück für den Client:


// Konfiguration für den TCP-Kanal erstellen
System.Collections.IDictionary channelSettings = new System.Collections.Hashtable();
channelSettings["name"] = "MeinClient";
channelSettings["port"] = 0;
channelSettings["secure"] = false;

// Binäre Serialisierung von komplexen Objekten aktivieren
BinaryServerFormatterSinkProvider serverFormatter = new BinaryServerFormatterSinkProvider();
serverFormatter.TypeFilterLevel = TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientFormatter = new BinaryClientFormatterSinkProvider();

// Neuen TCP-Kanal erzeugen
TcpChannel channel = new TcpChannel(channelSettings, clientFormatter, serverFormatter);

// Sicherstellen, dass vollständige Ausnahmeinformationen übertragen werden
if (RemotingConfiguration.CustomErrorsMode != CustomErrorsModes.Off)
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;

Großer Nachteil an der Sache ist, dass die Kommunikation so unverschlüsselt ist.

Wenn Du verschlüsselte Kommunikation ohne Domäne haben willst, kannst Du zukünftig Zyan einsetzen. Zyan verwendet - bei Bedarf - ein eigenes Sicherheitsprotokoll mit 3stufigem Handshake (TcpCustomServerProtocolSetup verwenden). Mit wenigen Handgriffen, kannst Du Zyan auch so konfigurieren, dass die Authentifizierung z.B. auf Basis einer Datenbankabfrage (SQL Server ö.ä.) durchgeführt wird.

Mit Zyan kannst Du auch Objekte für den Remotezugriff veröffentlichen, die nicht von MarshalByRefObj abgeleitet sind. Kannst Dir das Zyan-Projekt ja mal anschauen.

R
rock4k Themenstarter:in
39 Beiträge seit 2008
vor 13 Jahren
wow...

Toller Beitrag rainbird.

Das mit dem TypeFilterLevel auf den BinaryFormatter war schon so implementiert. Werde das aber auf beiden Seiten noch einmal prüfen und testen.

Toller Beitrag, weil die Info mit dem Zyan-Projekt... 😃 sehr interessant, das werde ich mir mal viel genauer anschauen.

Vielen Dank an euch.

Grüße rock4k