silverlight - WCF Silverlight 服务返回自定义错误,但作为 HTTP 500 响应而不是 200

标签 silverlight wcf http-status-codes

似乎我一直在用我的 Silverlight WCF 服务中的自定义错误来困扰我,所以我很高兴 尽力买啤酒 谁能帮我解决这个问题!!!

经过一番痛苦,我终于让我的 WCF 服务抛出自定义错误( ParameterValidationFault )并使用 Fiddler 我知道该服务的响应包含我的序列化错误对象,但 HTTP 响应代码是 500,而不是 200,因此客户端开始抛出异常而不是阅读回复。

我知道我的 SilverlightFaultBehavior class 应该负责更改响应状态代码,但是我在那里设置的断点从未被命中,所以我希望这是一个简单的 web.config 问题(文章末尾的 web.config)。

如果这是相关的,我的 web.config 显示“元素‘行为’具有无效的子元素‘silverlightFaults’...”,在部分

  <endpointBehaviors>
    <behavior name="SilverlightFaultBehavior">
      <silverlightFaults/>
    </behavior>
  </endpointBehaviors>

但我认为这不是问题,因为我可以毫无错误地查看服务的元数据。但是现在我认为这是阻止我的状态代码在退出时更改的缺失链接。我已经读到这个错误表明我的 behaviorExtension 中的类型属性有问题。元素不完全匹配 .NET 认为它应该是什么,但我已经检查了一百万次,命名空间和程序集名称绝对正确。我没有搞乱版本、文化或公钥的东西。

.NET 是否有一种简单的方法可以准确地告诉我这个类型的字符串应该是什么(空格、逗号等)?我已经在资源管理器中查看了 dll 的属性,但我仍然没有接近。

关于这可能来自何处的任何其他建议将不胜感激。
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <extensions>
      <behaviorExtensions>
        <add name="silverlightFaults" type="my.namespace.SilverlightFaultBehavior, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      </behaviorExtensions>
    </extensions>
    <behaviors>
      <endpointBehaviors>
        <behavior name="SilverlightFaultBehavior">
          <silverlightFaults/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <customBinding>
        <binding name="my.namespace.IService.customBinding0">
          <binaryMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
      <service name="my.namespace.IService">
        <endpoint address="" binding="customBinding" bindingConfiguration="my.namespace.IService.customBinding0" contract="my.namespace.IService" behaviorConfiguration="SilverlightFaultBehavior" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

我的 SilverlightFaultBehavior 类是这样开始的,是 this MSDN post 的复制粘贴命名空间更改
namespace my.namespace
{
    public class SilverlightFaultBehavior : BehaviorExtensionElement, IEndpointBehavior
    {
        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {

最佳答案

好的,所以这个问题尚未解决,但已解决。终于在this very useful post看到了我可以匿名endpointBehavior s。现在已应用该行为,并且自定义错误已正确(以非标准方式)作为 HTTP 200 返回。使行为匿名意味着它适用于所有端点,但由于我的服务目前只需要一个端点,这对我有用。

在阅读了该死的手册并逐字逐句实现后,我感到非常悲伤,这真的很糟糕。最后我的配置解析错误“元素'行为'具有无效的子元素'silverlightFaults'......”是无关紧要的,但是一路上非常臭的红鲱鱼很可能是原因(并且仍然可能是)。

如果有人想知道,我只是喝了啤酒。

关于silverlight - WCF Silverlight 服务返回自定义错误,但作为 HTTP 500 响应而不是 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7052460/

相关文章:

silverlight - 将前景转换器添加到 xaml 中的 DatagridTextColumn

silverlight - 在 WP7 上通话时禁用 DispatcherTimer

c# - WCF 服务的 Sharepoint 2010 问题

.net - 有没有办法通过 WCF 中的单个 TCP 连接进行真正的双向通信?

c# - 通过基本身份验证使用多个凭据调用 Web 服务

c# - HttpStatusCode 是任何 500 类型

php - 获取正确的http状态码php

Silverlight 4 - 安装是否需要管理员权限?

Silverlight 按钮 - 悬停时更改前景色

http - 使用创建的 201 重定向