WCF中的自定义JSON IErrorHandler返回状态码200/504何时应返回400
我有一个WCF服务,在其他绑定中,它还使用WebHttpBinding进行JSON输入/结果 我做了一个自定义的IErrorHandler实现,以便在出现问题时能够将StatusCode设置为400,并返回一条JSON可理解的消息。这是一种随处可见的直接实现(描述得很好) 我的问题是:当我使用VisualStudioWebDevelopmentServer(Cassini)在本地测试它时,它工作得非常好。但是,当我将其部署到测试服务器(Windows 2008带有IIS的标准配置和其他所有配置)时,它不起作用 当我调用它并使用Firebug进行调试时,我得到一个HttpStatusCode 200作为返回,没有响应文本。有了Fiddler,我得到了一个HttpStatusCode 504,根本没有返回。但是,我期望的行为(以及本地发生的情况)是使用responseText集调用ajax调用的错误回调 我远程调试了它,一切看起来都很好。执行管道是正常的,所有类都被调用,因为它们应该与本地类一样,只是不起作用 有什么建议吗?我几乎没有办法解决这个问题WCF中的自定义JSON IErrorHandler返回状态码200/504何时应返回400,wcf,json,http,webhttpbinding,ierrorhandler,Wcf,Json,Http,Webhttpbinding,Ierrorhandler,我有一个WCF服务,在其他绑定中,它还使用WebHttpBinding进行JSON输入/结果 我做了一个自定义的IErrorHandler实现,以便在出现问题时能够将StatusCode设置为400,并返回一条JSON可理解的消息。这是一种随处可见的直接实现(描述得很好) 我的问题是:当我使用VisualStudioWebDevelopmentServer(Cassini)在本地测试它时,它工作得非常好。但是,当我将其部署到测试服务器(Windows 2008带有IIS的标准配置和其他所有配置)
非常感谢 如果firebug和fiddler给出了不同的结果,那么如果您直接telnet到firebug并执行请求(类似:)会发生什么 如果您以某种方式获得奇怪的标题/格式,我不会感到惊讶(解释为什么firebug/fiddler不同意) 另一件要测试的事情是发布到您的开发人员机器上,看看这是机器特定的问题还是服务器与开发人员Web服务器的问题 如果它发生在VS之外的任何地方,您也可以尝试注释您设置的行
rmp.StatusCode = System.Net.HttpStatusCode.BadRequest;
rmp.StatusDescription = "Bad request";
这可能表明是响应代码问题还是错误处理程序问题
如果您可以编辑您的问题以包含结果(删除敏感信息),我们将查看是否可以进一步跟踪它
编辑:再次查看问题后,很可能是服务器在发送任何响应之前出错。默认情况下,FF可能假定为200,而ie可能假定为504(网关超时)。这完全是猜测,但也是可能的。您在事件日志中看到了什么吗?我有一个类似的问题,我能够解决。请看一下IIS设置。有关我如何克服这个问题的详细信息,请参阅本文:我将尝试telnet和其他机器。然而,令人惊讶的是,我能够创建一个复制程序,它可以工作,所以只有我的真实代码不能工作。我要试试这个,然后用结果编辑这个问题。谢谢
rmp.StatusCode = System.Net.HttpStatusCode.BadRequest;
rmp.StatusDescription = "Bad request";