2009-07-01 9 views
5

Hier ist meine Antwort Umschlag:WCF typisierte Fehler und interner Server Fehlercode 500?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <s:Fault> 
     <faultcode>s:Client</faultcode> 
     <faultstring xml:lang="en-US">The creator of this fault did not specify a Reason.</faultstring> 
     <detail> 
      <ServiceFault xmlns="http://schemas.datacontract.org/2004/07/Zagat.Services.FaultException" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
       <ReasonCollection xmlns:a="http://schemas.datacontract.org/2004/07/Zagat.Enterprise.Domain"/> 
       <ReasonMessage>Credentials are not valid</ReasonMessage> 
      </ServiceFault> 
     </detail> 
     </s:Fault> 
    </s:Body> 
</s:Envelope> 
enter code here 

Hier ist mein Rubrik:

HTTP/1.1 500 Internal Server Error 
Date: Wed, 01 Jul 2009 17:55:33 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Cache-Control: private 
Content-Type: text/xml; charset=utf-8 
Content-Length: 564 

Wie kann ich IIS erhalten einen 200 statt einer 500 zurück? Mein Code läuft auf dem Server, ich sende gerade einen Fehler an den Client zur Verarbeitung.

Daniel

+0

Erhalten Sie diese Nachricht in einer ProtocolException? Ich hatte ein Problem mit diesen Ausnahmen, weil ich immer den HTML-Code in der Ausnahmebedingung erhielt. Jetzt nehme ich an, dass jede Protokollausnahme mit diesem HTML-Code kommt und ich parse es, um die echte Nachricht zu erhalten. http://stackoverflow.com/questions/998065/does-system-servicemodel-protocolexception-always-have-html-code-in-its-message – sebagomez

Antwort

5

Sie können die Fehlerbehandlung von WCF ganz einfach anpassen. Siehe Modifying HTTP Error Codes, Part 1 und Part 2 von Nicholas Allens Indigo Blog; WCF: Throwing Exceptions With WebHttpBinding von Andre de Cavaignac; und von Brajendra Singh.

+0

Sicher, aber wenn Sie es eine 200 machen, werden die Kunden sogar erkennen es? –

+0

Ich habe Optionen in anderen Rahmen gesehen, die Sie zwischen 500 und 200 wählen können. Ich denke, es war Delphi SOAP. Als ich die Fehlerbehandlung durchführte, machte ich einen Dienst, der als SOAP und REST funktioniert, also machte ich 500 für SOAP und 401,403,404 usw. für REST. –

+0

Ok, aber haben Sie einen SOAP-Fehler für REST zurückgegeben? Zurückgeben, was Sie für REST mögen, aber das SOAP-Protokoll begrenzt, welche HTTP-Codes unter welchen Umständen verwendet werden können. Wenn Sie etwas zurückgeben möchten, das mehr oder weniger wie ein SOAP-Fehler aussieht, aber nicht _be_, dann fangen Sie die Ausnahme ab und geben Sie nur Ihr eigenes benutzerdefiniertes XML zurück. Wenn Sie jedoch erwarten, dass der Client Ihren SOAP-Fehler als SOAP-Fehler erkennt, müssen Sie den korrekten Statuscode verwenden. –

1

Meine Erinnerung an das SOAP-Protokoll ist, dass Fehler als Code 500

Fehler sind nicht Erfolg Antworten gesendet werden sollen. Sie geben die Art des Fehlers an.

Verwandte Themen