Laden...

WCF - Binding an mehrere IP's - WinAuth - Unterschiedliches Verhalten

Erstellt von EgoFelix vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.411 Views
E
EgoFelix Themenstarter:in
38 Beiträge seit 2009
vor 12 Jahren
WCF - Binding an mehrere IP's - WinAuth - Unterschiedliches Verhalten

Hallo!

Ich habe im WCF ein "Multibinding" erstellt, welches an mehreren IP's horcht.

Wenn ich auf dem selben Rechner via IPv4 zu dem Service verbinde, funktioniert alles einwandfrei. Verwende ich stattdessen IPv6, bekomme ich jedesmal die Fehlermeldung "Der Aufrufer wurde vom Dienst nicht authentifiziert." (Windows-Authentifizierung ist fehlgeschlagen).

Mein Binding sieht wie folgend aus:


NetTcpBinding binding = new NetTcpBinding();

// Buffered Mode
binding.TransferMode = TransferMode.Buffered;

// ClientZertifikat deaktivieren
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None;

// WinAuth und Verschlüsselung
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;

// Sessions aktivieren
binding.ReliableSession.Enabled = true;
binding.ReliableSession.InactivityTimeout = TimeSpan.FromSeconds(30);

// Größen einstellen
binding.MaxBufferSize = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;
binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;

// Timeouts
binding.ReceiveTimeout = TimeSpan.FromSeconds(30);
binding.SendTimeout = TimeSpan.FromSeconds(30);
binding.CloseTimeout = TimeSpan.FromSeconds(10);
binding.OpenTimeout = TimeSpan.FromSeconds(10);

Als URI wird folgende verwendet:

string.Format("net.tcp://{0}:{1}/TestService/ClientService", System.Net.Dns.GetHostName(), this.settings.Port)

Ich kann mir nicht erklären, warum es auf einer IP geht, auf einer anderen aber nicht. Die Einstellungen bleiben ja die gleichen.

Hat vielleicht jemand schonmal dieses Problem gehabt, oder gibt es beim Multibinding irgendwelche Einschränkungen?

Mit freundlichen Grüßen
Felix

1.346 Beiträge seit 2008
vor 12 Jahren

Vielleicht liegt es an der falschen Adresse, wenn du IPV6 verwendest

net.tcp://[ipv6-adresse]:port/ClientService.

Die IP muss in eckige Klammern, damit eindeutig ist, welche teile zur IP, und welche zum Port gehören

E
EgoFelix Themenstarter:in
38 Beiträge seit 2009
vor 12 Jahren

Für das Multibinding (An mehreren Adressen), ist es beim net.tcp Binding nötigt, keine IP-Adresse anzugeben, sondern eben den Hostname.
Dies verwende ich extra aus diesem Grund.
Der String lautet also "net.tcp://TestRechner:1234/ClientService". Daher kann auch kein Fehler bei der Angabe der IP passieren.

Mit freundlichen Grüßen
Felix