代码之家  ›  专栏  ›  技术社区  ›  tucaz

WCF中的自定义JSON IErrorHandler在应返回400时返回StatusCode 200/504

  •  0
  • tucaz  · 技术社区  · 14 年前

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

    我定制了一个IErrorHandler实现,以便在出错时将StatusCode设置为400,并返回一个JSON可理解的消息。它的直接实现,你可以在任何地方找到(很好的方式描述 here

    我的问题是:当我使用visualstudiowebdevelopmentserver(Cassini)在本地测试它时,它工作得非常完美。但是,当我将它部署到我的测试服务器(Windows2008,带有IIS和其他所有配置的标准配置)时,它无法工作。

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

    有什么建议吗?我已经没有办法了。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Basic    14 年前

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

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

    另一个要测试的事情是发布到您的dev机器上,看看这是一个特定于机器的问题,还是一个服务器对devwebserver的问题。

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

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

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

    再次查看问题后,很可能是服务器在发送任何响应之前发生了错误。默认情况下,FF可能假设为200,而ie可能假设为504(网关超时)。这完全是猜测,但也是可能的。你在事件日志中看到什么了吗?