Pergunta sobre .net-3.5, iis-6, wcf – Falhas digitadas do WCF e código de erro interno do servidor 500?

5

Aqui está o meu envelope de resposta:

<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

Aqui está meu cabeçalho:

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

Como posso obter o IIS para retornar um 200 em vez de um 500? Meu código é executado no servidor, estou apenas enviando uma falha ao cliente para processar.

Daniel

Você está recebendo essa mensagem em um ProtocolException? Eu tive um problema com essas exceções porque eu sempre tenho o código html na mensagem de exceção. Agora eu apenas suponho que cada exceção de protocolo vem com este código html e eu analiso para obter a mensagem real.stackoverflow.com/questions/998065/… sebagomez

Sua resposta

2   a resposta
1

Minha lembrança do protocolo SOAP é que as falhas devem ser enviadas como código 500.

Falhas não são respostas de sucesso. Eles indicam a natureza do fracasso.

5

Você pode personalizar facilmente o tratamento de erros do WCF. VejoModificando códigos de erro HTTP, parte 1 eParte 2 por Indigo Blog de Nicholas Allen;WCF: lançando exceções com WebHttpBinding por Andre de Cavaignac; eManipulação de exceção no serviço da Web do WCF de Brajendra Singh.

Eu vi opções em outro framework que permite escolher entre 500 e 200. Eu acho que foi o SOAP do Delphi. Quando eu fiz o tratamento de erros, eu estava fazendo um serviço que funciona como SOAP e REST, então eu estava fazendo 500 para SOAP e 401.403.404, etc para REST. Eugene Yokota
Claro, mas se você fizer um 200, os clientes vão reconhecê-lo? John Saunders
Depende. A primeira coisa que a ligação HTTP SOAP fala é que é opcional. Veja 7.1.1 Opcionalidade: O SOAP HTTP Binding é opcional e os nós SOAP não são obrigados a implementá-lo. Um nó SOAP que implemente corretamente e completamente o SOAP HTTP Binding pode ser considerado "em conformidade com a conexão HTTP do SOAP 1.2". Eugene Yokota
A parte 2 da especificação faz parte da especificação e especifica as ligações! John Saunders

Perguntas relacionadas