【问题标题】:WCF Typed Faults and Internal Server Error code 500?WCF 类型错误和内部服务器错误代码 500?
【发布时间】:2010-11-07 10:09:35
【问题描述】:

这是我的回复信封:

<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?我的代码在服务器上运行,我只是将故障发送给客户端进行处理。

丹尼尔

【问题讨论】:

  • 您是否在 ProtocolException 中收到该消息?我遇到了这些异常的问题,因为我总是在异常消息中得到 html 代码。现在我只是假设每个协议异常都带有这个 html 代码,我解析它以获得真正的消息。 stackoverflow.com/questions/998065/…

标签: wcf .net-3.5 iis-6


【解决方案1】:

我对 SOAP 协议的记忆是错误将作为代码 500 发送。

故障不是成功响应。它们表明了故障的性质。

【讨论】:

    【解决方案2】:

    您可以轻松自定义 WCF 的错误处理。请参阅 Nicholas Allen 的 Indigo 博客的 Modifying HTTP Error Codes, Part 1Part 2WCF: Throwing Exceptions With WebHttpBinding 安德烈·德·卡芬雅克;和Exception Handling in WCF Web Service Brajendra Singh。

    【讨论】:

    • 当然,但是如果你把它设为 200,客户会认出它吗?
    • 我在其他框架中看到了允许您在 500 和 200 之间进行选择的选项。我认为这是 Delphi 的 SOAP。当我进行错误处理时,我正在创建一个作为 SOAP 和 REST 工作的服务,所以我为 SOAP 做 500,为 REST 做 401,403,404 等。
    • 好的,但是您是否为 REST 返回了 SOAP 错误?为 REST 返回您喜欢的内容,但 SOAP 协议限制了哪些 HTTP 代码可以在哪些情况下使用。如果您想返回 看起来 或多或少像 SOAP 错误,但又不是 的东西,那么捕获异常并返回您自己的自定义 XML。但是,如果您希望客户端将您的 SOAP 错误视为 SOAP 错误,则需要使用正确的状态码。
    • 我为 REST 做了 POX 或 JSON。 SOAP 协议本身是一个消息传递框架,因此它不指定 HTTP 状态。您可以使用电子邮件或信鸽来携带 SOAP 消息。 w3.org/TR/soap12-part1 指定 500 的部分是规范第 2 部分中的 SOAP HTTP 绑定:w3.org/TR/soap12-part2/#soapinhttp。我当然不会推荐使用 500,但如果 @DDiVita 想要这样做,这取决于他。这可能是必要的,因为包括 .NET 2.0 IIRC 在内的某些平台会丢失响应消息正文。 FaultException(TDetail) 是 .NET 3.x 的一项功能。
    • 规范的第 2 部分是规范的一部分,它指定了绑定!
    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多