Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF中的自定义JSON IErrorHandler返回状态码200/504何时应返回400_Wcf_Json_Http_Webhttpbinding_Ierrorhandler - Fatal编程技术网

WCF中的自定义JSON IErrorHandler返回状态码200/504何时应返回400

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的标准配置和其他所有配置)

我有一个WCF服务,在其他绑定中,它还使用WebHttpBinding进行JSON输入/结果

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

我的问题是:当我使用VisualStudioWebDevelopmentServer(Cassini)在本地测试它时,它工作得非常好。但是,当我将其部署到测试服务器(Windows 2008带有IIS的标准配置和其他所有配置)时,它不起作用

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

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

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


非常感谢

如果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";