"Ungültig oder abgelaufen security-context-token", wenn ausgeführt wird, nachdem ein Debuggen neu starten
Habe ich eine WCF Anwendung, die ich bin-Kodierung. Ich starten und stoppen mehrmals, wie ich die Dinge ändern, und führen Sie dann den service wieder anrufen.
Da ich session info ich bin mit wsHttpBinding
.
Bevor ich nach wsHttpBinding
ich war mit basicHttpBinding
und ich konnte den Dienst stoppen, änderungen vornehmen und neu starten. Dann könnte ich meinen WCF test client WCF (Sturm) gegen den Endpunkt und es würde immer noch gut laufen.
Nun sagt es mir:
Die Nachricht konnte nicht verarbeitet werden. Dies ist wahrscheinlich, weil die Aktion'http://tempuri.org/IMyService/MyOperation', falsch ist, oder weil die Nachricht enthält eine ungültige oder abgelaufene security-context-token oder weil es ein Ungleichgewicht gibt zwischen den Bindungen. Der security-context-token wäre ungültig, wenn der Dienst abgebrochen, der Kanal aufgrund von Inaktivität. Um zu verhindern, dass der service von Abbruch-idle-sessions vorzeitig erhöhen die Receive-timeout auf den service-Endpunkt ist verbindlich.
Somit habe ich zum auffrischen meiner Verbindung und neu-Einrichtung meiner service-Aufruf (was lästig wird, nachdem mehrere hundert mal.).
Habe ich gelesen, dass das Sicherheits-timeout beträgt 10 Minuten. Ich bin wieder läuft, in weniger als 2 Minuten, so dass ich nicht denke, es ist ein time-out Problem.
Meine Vermutung ist, dass das token abläuft für die offensichtliche Grund, dass ich getötet habe und neu gestartet und der Dienst.
Die Sache ist, dass ich brauche nicht die Sicherheit Zeug überhaupt (ich brauche nur die session-Zeug oder ich wäre mit BasicHttpBinding
Ist es eh nach meinem WCF-Service Sie kümmern sich nicht um Sicherheits-Kontext-Token?
Hinweis: Mein test-client standardmäßig auf wsHttpBinding und Sicherheit gesetzt. Aber ich nehme an, es ist diese Einstellung, da mein Dienst zu veröffentlichen, braucht es Sicherheit.
Dinge, die ich versucht habe:
- Ich habe versucht eine Konfiguration ähnlich zu dem, was ich gefunden Hier
<bindings> <wsHttpBinding> <binding name="WsEventLogBinding"> <security mode="Message"> <message establishSecurityContext="false" /> </security> </binding> </wsHttpBinding> </bindings>
Aber ich weiß wirklich nicht, was dieses bedeutet, oder, wenn es das ist, was ich brauche (das ist keine Sicherheit (für jetzt)).
Diese nicht entfernen, das Problem.
- Einstellung
<security mode="None">
Dies nicht hilft.
außerdem haben Sie sich hier an: stackoverflow.com/questions/4767102/...
InformationsquelleAutor Vaccano | 2013-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf den ersten, Sie sind wahr : basicHttpBinding unterstützt dies nicht aufgrund der verbindungslosen /zustandslose Natur des HTTP-Protokolls.
Aber ich denke, es ist etwas falsch in deinem WCF Verständnis.
Sitzung ist ein allgemeiner Begriff in der WCF. Kann es sein Sicherheit-basiertes session -, in dem beide enden der Kommunikation vereinbart haben, eine bestimmte sichere Konversation oder ein realiable Sitzung in die Nachrichten konfiguriert werden können geliefert werden in der Reihenfolge und genau einmal, Gewährleistung Nachrichten auch dann empfangen, wenn Nachrichten Reisen über mehrere Knoten während des Gesprächs.
Beide Modi ermöglichen es Ihnen, wählen Sie InstanceContextMode.PerSession. Ist das wirklich das, was Sie tun möchten ?
WCF-Sicherheit stützt sich auf die gegenseitige Authentifizierung ; Wenn beide Parteien das Vertrauen der anderen Anmeldeinformationen (basierend auf Forderungen), dann ein sicherer Zusammenhang hergestellt werden kann, in dem alle Nachrichten, die ausgetauscht werden, vertraulich, und alle Nachrichten werden signiert, um Ihre Integrität. Der security session ist einzigartige und Sie können nicht verwenden es in einem anderen Gespräch.
Hier ist das problem mit Ihrem Kontext: das problem ist nicht auf Server-Seite aber auf Client-Seite. Weil Sie etwas gehalten werden, die auf client-und auf service, Umbau der Dienst Spülen Sie die gesamte WCF-Kontext auf den service (alle Instanzen & Sitzungen werden entsorgt) .Es ist kein allgemeiner datenspeicher im Zusammenhang mit WCF-sessions (ein Unterschied mit asp.net Sitzung), also ein Neustart, alles fallen zu lassen. Aber die Kunden glauben immer noch authentifiziert werden, da der "ungültig" - Kontext.
Um dieses Problem zu lösen, es gibt eine checkbox für dieses Szenario auf der Standard-Wcf Test-Client: "Start eines neuen proxy". Auf WCf Sturm, es ist eine Allgemeine config Unter der Haube/Sonstiges "erstellen Sie stets neuer proxy".
Hinweis : Auf die Produktion, die Sie nie haben, dieses Szenario, weil der service immer.
Wenn Sie mir Folgen, können Sie versuchen zuverlässigen Sitzung. Sie können testen, aber ich bin mir nicht sicher, ob dies funktionieren wird.
Wichtiger Hinweis : ich weiß nicht, Ihre WCF-Ebene, aber in der WCF-Clients und Dienste müssen synchronisiert Konfigurationen (gleiche Sicherheit, session-Einstellungen, ...)
InformationsquelleAutor Cybermaxs
wsHttpBinding Sicherheit standardmäßig aktiviert.
Versuchen Sie es mit dieser auf Ihre verbindliche Konfiguration zu deaktivieren, Sicherheit:
Auch Sie Fehler wsHttpBinding Verwandte. Wenn Sie sessions verwenden, und starten Sie den server neu, der berichtet security-Fehlermeldung wird angezeigt.
Laut MSDN:
und
Klingt wie das erwartete Verhalten.
InformationsquelleAutor lstern
Können Sie eine grundlegende http-Bindung mit
TransportCredentialOnly Sicherheits-Modus
InformationsquelleAutor Damith
Security-mode None sollte die Arbeit tun.
Dont vergessen, zu gelten, die
bindingConfiguration="WsEventLogBinding"
auf Ihrem endpoint.InformationsquelleAutor YK1