【问题标题】:Custom JSON IErrorHandler in WCF returning StatusCode 200/504 when should return 400WCF 中的自定义 JSON IErrorHandler 在应返回 400 时返回 StatusCode 200/504
【发布时间】:2010-08-17 13:59:37
【问题描述】:

我有一个 WCF 服务,除了其他绑定之外,它还使用 WebHttpBinding 处理 JSON 输入/结果。

我做了一个自定义的 IErrorHandler 实现,以便能够在出现问题时将 StatusCode 设置为 400 并返回 JSON 可理解的消息。这是随处可见的直接实现(描述了here 的好方法)。

我的问题是:当我使用 Visual Studio Web Development Server (Cassini) 在本地测试它时,它运行良好。但是,当我将它部署到我的测试服务器(Windows 2008 与 IIS 和其他所有标准配置)时,它不起作用。

当我调用它并使用 Firebug 进行调试时,我得到一个 HttpStatusCode 200 作为返回并且没有响应文本。使用 Fiddler,我得到一个 HttpStatusCode 504 并且根本没有回报。但是,我预期的行为(以及本地发生的情况)是调用带有 responseText 集的 ajax 调用的错误回调。

我远程调试了它,一切看起来都很好。执行管道正常,所有类都被调用,就像它们在本地一样,只是它不起作用。

有什么建议吗?我几乎没有办法解决这个问题。

非常感谢!

【问题讨论】:

    标签: wcf json http webhttpbinding ierrorhandler


    【解决方案1】:

    如果 firebug 和 fiddler 给出不同的结果,如果你直接 telnet 到它并执行请求会发生什么(类似:)

        GET /VirtualDirectoryAndGetData HTTP/1.1
        HOST: example.com
        [carriage return]
    

    如果你以某种方式得到奇怪的标题/格式,我不会感到惊讶(解释为什么 firebug/fiddler 不同意)

    要测试的另一件事是发布到您的开发计算机,以查看它是特定于计算机的问题还是服务器与开发网络服务器的问题。

    如果它发生在 VS 之外的任何地方,您也可以尝试注释掉您设置的行

      rmp.StatusCode = System.Net.HttpStatusCode.BadRequest;
      rmp.StatusDescription = "Bad request";
    

    这可能表明是响应代码问题还是错误处理程序问题。

    如果您可以编辑您的问题以包含结果(删除敏感信息),我们会看看我们是否可以进一步追踪它。

    编辑:再次查看问题后,很可能服务器在发送任何响应之前就出错了。 FF 可能默认为 200,而 ie 可能默认为 504(网关超时)。这是完全的猜测,但有可能。您在事件日志中看到什么了吗?

    【讨论】:

    • 我会在另一台机器上尝试 telnet。但是,我能够创建一个复制品,令人惊讶的是,它可以正常工作,因此只有我的真实代码无法正常工作。我将尝试这个并使用结果编辑问题。谢谢!
    【解决方案2】:

    我有一个类似的问题,我能够解决。看一下 IIS 设置。我如何克服这个问题的详细信息在这篇文章中:IErrorHandler returning wrong message body when HTTP status code is 401 Unauthorized

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多