2009-07-01 15 views
5

Oto moja odpowiedź koperta:Błędy typowane przez WCF i błąd serwera wewnętrznego 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 

Oto moja Header:

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 

Jak mogę uzyskać IIS zwraca 200 zamiast 500? Mój kod działa na serwerze, właśnie wysyłam błąd do klienta do przetworzenia.

Daniel

+0

Czy otrzymujesz tę wiadomość w wyjątku ProtocolException? Wystąpił problem z tymi wyjątkami, ponieważ zawsze otrzymałem kod HTML w komunikacie wyjątku. Teraz tylko przypuszczam, że każdy wyjątek protokołu przychodzi z tym kodem HTML i parsuję go, aby uzyskać prawdziwą wiadomość. http://stackoverflow.com/questions/998065/does-system-servicemodel-protocolexception-always-have-html-code-in-its-message – sebagomez

Odpowiedz

5

Możesz łatwo dostosować obsługę błędów WCF. Zobacz Modifying HTTP Error Codes, Part 1 i Part 2 autorstwa Indigo Blog Nicholasa Allena; WCF: Throwing Exceptions With WebHttpBinding autorstwa Andre de Cavaignac; i Exception Handling in WCF Web Service przez Brajendra Singh.

+0

Oczywiście, ale jeśli stworzysz 200, klienci będą nawet rozpoznawać to? –

+0

Widziałem opcje w innych ramach, które pozwalają wybrać między 500 a 200. Myślę, że to było SOAP Delphi. Kiedy zajmowałem się obsługą błędów, robiłem usługę, która działa jako SOAP i REST, więc robiłem 500 dla SOAP i 401,403,404, itp. Dla REST. –

+0

OK, ale czy zwróciłeś błąd SOAP dla REST? Zwróć, co chcesz, aby uzyskać REST, ale limity protokołu SOAP określają, które kody HTTP mogą być używane, w jakich okolicznościach. Jeśli chcesz zwrócić coś, co bardziej lub mniej przypomina błąd SOAP, ale nie _, to złap wyjątek i po prostu zwróć swój własny niestandardowy kod XML. Ale jeśli spodziewasz się, że klient zobaczy Twój błąd SOAP jako błąd SOAP, musisz użyć poprawnego kodu statusu. –

1

Moje wspomnienie protokołu SOAP jest to, że błędy mają być przesyłane jako kod 500.

Usterki nie są sukcesu odpowiedzi. Wskazują na charakter awarii.

Powiązane problemy