Ich migriere gerade meinen WCF RESTful-Service von .NET 3.5 (Starter Kit) nach .NET 4. Ich habe mein Projekt mit einer WCF Rest Service-Vorlage aus Visual Studio 2010 gestartet. Ich musste herausfinden, wie ich mein Autorisierungsschema (früher mit RequestInterceptor) mit ServiceAuthorizationManager beibehalten konnte. Nach etwas Arbeit und Recherchen habe ich es geschafft. Aber jetzt habe ich ein Sicherheitsproblem. Mein Dienst wurde verwendet, um meinen Kunden über Verarbeitungsfehler mithilfe des HTTP-Statuscodes und einer kurzen Beschreibung zu informieren. Ich habe WebOperationContext an vielen Stellen meiner Servicemethode verwendet, um den Kunden zu beschreiben, was schief gelaufen ist:
%Vor%Aber in WCF 4 funktioniert nur StatusCode - StatusDescription schlägt automatisch fehl. Ich kann nicht herausfinden warum. Meine einzige Vermutung ist, dass WebOperationContext in diesem neuen WCF 4-Szenario nicht funktioniert, und ich stattdessen OperationContext verwenden sollte, aber das funktioniert auch nicht. Die folgende Methode wird in meiner benutzerdefinierten Klasse verwendet, um den ServiceAuthorizationManager zu erweitern und Clients darüber zu informieren, dass auf eine Anfrage kein Zugriff möglich war, da der AuthDigest fehlerhaft erstellt wurde:
%Vor%Auch wenn hier OperationContext direkt verwendet wird (ohne WebOperationContext), funktioniert StatusDescription nicht.
Was fehlt mir hier? Warum kann so ein kleines Ding von .NET 3.5 zu 4 brechen?
Ich empfehle Ihnen, WebFaultException
in .NET 4.0 zu verwenden. Lesen Sie zum Beispiel "Einführung in WCF WebHttp-Dienste in .NET 4 ". Probieren Sie
OK! Hier ist, was ich herausgefunden habe. Mit meinem Code ist nichts falsch. Es ist nichts falsch mit .NET Framework 3.5 oder 4.0.
Das Problem ist asp.net Entwicklungsserver. Wenn Sie Ihre Dienstanwendung debuggen, wird sie wahrscheinlich auf dem ASP.net-Entwicklungsserver gehostet und ignoriert die von der Anwendung angegebene Statusbeschreibung vollständig. Verweisen Sie auf diese Frage .
Die Bounty an @Oleg vergeben, die zumindest versucht hat, mir zu helfen.
Ein potenzielles Problem besteht darin, dass Sie den RequestContext auf null setzen:
%Vor%Eine andere Möglichkeit ist, dass der Parameter "description" nicht gesetzt ist.
Auch auf der Clientseite überprüfen Sie:
%Vor%Eine weitere Möglichkeit, könnten die Werte nach dem Aufruf von returnCode überschrieben worden sein?
Tags und Links wcf rest http-status-codes operationcontext weboperationcontext