2009-07-01 5 views
5

Вот мой ответ конверт:Ошибки WCF и внутренний сервер Код ошибки 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 

Вот мой Заголовок:

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 

Как я могу получить IIS, чтобы вернуть 200 вместо 500? Мой код работает на сервере, я просто посылаю ошибку клиенту для обработки.

Daniel

+0

Получаете ли вы это сообщение в протоколеException? У меня была проблема с этими исключениями, потому что я всегда получал код html в сообщении об исключении. Теперь я просто утверждаю, что каждое исключение протокола поставляется с этим html-кодом, и я разбираю его, чтобы получить реальное сообщение. http://stackoverflow.com/questions/998065/does-system-servicemodel-protocolexception-always-have-html-code-in-its-message – sebagomez

ответ

5

Вы можете легко настроить обработку ошибок WCF. См. Modifying HTTP Error Codes, Part 1 и Part 2 в блоге Индиго Николаса Аллена; WCF: Throwing Exceptions With WebHttpBinding автор Andre de Cavaignac; и Exception Handling in WCF Web Service от Brajendra Singh.

+0

Конечно, но если вы сделаете это 200, клиенты даже узнают Это? –

+0

Я видел варианты в других рамках, которые позволяют выбирать между 500 и 200. Я думаю, что это SOAP Delphi. Когда я делал обработку ошибок, я делал сервис, который работает как SOAP и REST, поэтому я делал 500 для SOAP и 401,403,404 и т. Д. Для REST. –

+0

Хорошо, но вы вернули ошибку SOAP для REST? Возвратите то, что вам нравится для REST, но протокол SOAP ограничивает, какие коды HTTP могут использоваться при каких обстоятельствах. Если вы хотите вернуть то, что _looks_ более или менее похоже на ошибку SOAP, но не _be_, а затем поймать исключение и просто вернуть свой собственный XML. Но если вы ожидаете, что клиент увидит вашу ошибку SOAP как ошибку SOAP, вам нужно будет использовать правильный код состояния. –

1

Воспоминания о протоколе SOAP является то, что ошибки должны быть отправлены в качестве кода 500.

Отказов не успех ответы. Они указывают на характер отказа.