0

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

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

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

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

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

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

非常感谢!

4

2 回答 2

0

如果 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(网关超时)。这是完全的猜测,但有可能。您在事件日志中看到任何内容吗?

于 2010-08-26T18:50:32.570 回答
0

我有一个类似的问题,我能够解决。看一下 IIS 设置。关于我如何克服这个问题的详细信息在这篇文章中:当 HTTP 状态代码为 401 未授权时,IErrorHandler 返回错误的消息正文

于 2016-07-15T18:45:58.933 回答