2009-07-01 12 views
5

Ecco la mia busta di risposta:Errori di battitura in macchina WCF e server interno Codice errore 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 

Qui è la mia intestazione:

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 

Come posso ottenere IIS per restituire un 200 invece di 500? Il mio codice gira sul server, sto solo inviando un errore al client da elaborare.

Daniel

+0

Stai ricevendo quel messaggio in un ProtocolException? Ho avuto un problema con queste eccezioni perché ho sempre ottenuto il codice html nel messaggio di eccezione. Ora ho appena detto che ogni eccezione di protocollo viene fornita con questo codice html e la analizzo per ottenere il messaggio reale. http://stackoverflow.com/questions/998065/does-system-servicemodel-protocolexception-always-have-html-code-in-its-message – sebagomez

risposta

5

È possibile personalizzare facilmente la gestione degli errori di WCF. Vedi Modifying HTTP Error Codes, Part 1 e Part 2 di Nicholas Allen's Indigo Blog; WCF: Throwing Exceptions With WebHttpBinding di Andre de Cavaignac; e Exception Handling in WCF Web Service di Brajendra Singh.

+0

Certo, ma se lo fai un 200, i clienti riconosceranno anche vero? –

+0

Ho visto opzioni in altri framework che ti consentono di scegliere tra 500 e 200. Penso che sia stato il SAPONE di Delphi. Quando ho gestito l'errore, stavo creando un servizio che funziona come SOAP e REST, quindi stavo facendo 500 per SOAP e 401.403.404, ecc. Per REST. –

+0

Ok, ma hai restituito un errore SOAP per REST? Restituisce ciò che ti piace per REST, ma il protocollo SOAP limita i codici HTTP che possono essere utilizzati in quali circostanze. Se vuoi restituire qualcosa che _looks_ più o meno come un errore SOAP, ma non _be_ one, allora prendi l'eccezione e restituisci il tuo XML personalizzato. Tuttavia, se si prevede che il client visualizzi l'errore SOAP come errore SOAP, è necessario utilizzare il codice di stato corretto. –

1

Il mio ricordo del protocollo SOAP è che i guasti devono essere inviati come codice 500.

guasti non sono risposte di conferma. Indicano la natura del fallimento.

Problemi correlati