Alle,ungültige oder abgelaufene Sicherheitskontext-Token in WCF Webservice
Ich habe einen WCF-Webdienst (lassen Sie sich genannten Service "B") unter IIS gehostet ein Dienstkonto (VM, Windows 2003 SP2) verwenden. Der Dienst macht einen Endpunkt verfügbar, der WSHttpBinding mit den Standardwerten außer maxReceivedMessageSize, maxBufferPoolSize, maxBufferSize und einigen der erhöhten Zeitüberschreitungen verwendet.
Der Webdienst wurde mithilfe des Visual Studio Load Test-Frameworks mit ungefähr 800 gleichzeitigen Benutzern getestet und hat alle Tests erfolgreich bestanden, ohne dass Ausnahmen ausgelöst wurden. Der Proxy im Komponententest wurde aus der Konfiguration erstellt.
Es gibt eine Sharepoint-Anwendung, die den Office SharePoint Server-Suchdienst zum Aufrufen der Webdienste "A" und "B" verwendet. Die Anwendung erhält Daten von Dienst "A", um eine Anforderung zu erstellen, die an Dienst "B" gesendet wird. Die Antwort von Dienst "B" wird für die Suche indiziert. Der Proxy wird programmgesteuert mithilfe der ChannelFactory erstellt.
Wenn Service "A" weniger als 10 Minuten dauert, sind die Anrufe zu Service "B" erfolgreich. Wenn der Dienst "A" jedoch länger dauert (~ 20 Minuten), rufen die Anrufe für den Dienst "B" die folgende Ausnahme auf:
Ausnahmebedingungsnachricht: Die andere Partei hat einen ungesicherten oder falsch gesicherten Fehler erhalten. Siehe die interne FaultException für den Fehlercode und das Detail. Inner Exception Message: Die Nachricht konnte nicht verarbeitet werden. Dies liegt höchstwahrscheinlich daran, dass die Aktion 'Namespace/OperationName' falsch ist oder weil die Nachricht ein ungültiges oder abgelaufenes Sicherheitskontext-Token enthält oder weil die Bindungen nicht übereinstimmen. Das Sicherheitskontext-Token wäre ungültig, wenn der Dienst den Kanal aufgrund von Inaktivität abgebrochen hat. Um zu verhindern, dass der Dienst inaktive Sitzungen vorzeitig abbricht, erhöhen Sie das Empfangszeitlimit für die Bindung des Dienstendpunkts.
Die Bindungseinstellungen sind identisch, die Zeit im Client-Server und im Web-Service-Server sind mit dem Windows-Zeitdienst synchronisiert, die gleiche Zeitzone.
Wenn ich auf dem Server suchen, wo Web-Service "B" gehostet wird, kann ich die folgenden Sicherheitsfehler sehen protokollieren:
Quelle: Sicherheit
Kategorie: Anmelden/Abmelden
Ereignis-ID : 537
Benutzer NT AUTHORITY \ SYSTEM
Anmeldung fehlgeschlagen:
Grund: Ein Fehler ist aufgetreten bei der Anmeldung
Typ Anmeldung: 3
Logon-Prozess: Kerberos
Authentifizierungspaket: Kerberos
Statuscode: 0xC000006D
Substatus Code: 0xC0000133
Nach dem Lesen einiger Blogs online, der Sta tus code bedeutet STATUS_LOGON_FAILURE und der Substatuscode bedeutet STATUS_TIME_DIFFERENCE_AT_DC. aber ich habe bereits sowohl die Server- als auch die Client-Uhren überprüft und sie sind synchronisiert.
Ich bemerkte auch, dass das Sicherheitstoken irgendwo im Client-Server zwischengespeichert zu sein scheint, weil sie einen anderen Prozess haben, der den Webdienst "B" mit dem gleichen Dienstkonto aufruft und Daten beim ersten Aufruf erfolgreich erhält. Dann starten sie den Prozess zum Aktualisieren der Suchdienstindizes des Office-Sharepoint-Servers und es schlägt fehl. Wenn sie dann den ersten Prozess erneut aufrufen, wird es ebenfalls fehlschlagen.
Hat jemand diese Art von Problemen erlebt oder irgendwelche Ideen?
Grüße,
--Damian
Ich habe aufgehört, mit Verwenden von Statment für Service zu arbeiten. Wenn ich es entsorgen muss, rufen Sie explizite ((IDispose) Service) .Dispose(); Schließlich –
Das Problem mit der Anweisung using ist, dass, wenn Sie eine Ausnahme während des Aufrufs haben, die Verwendung Anweisung Dispose() auf dem Client aufrufen, die Close() auf dem zugrunde liegenden Kanal aufrufen wird. Da die Verbindung bereits fehlerhaft ist, wird dies eine weitere Ausnahme auslösen und somit wird die erste Ausnahme nie auftauchen. – flayn