我有一个WCF服务,其他绑定中也使用WebHttpBinding来获取JSON输入/结果。
我创建了一个自定义IErrorHandler实现,以便在出现问题时将StatusCode设置为400,并返回JSON可理解的消息。这是你可以在任何地方找到的直接实现(很好地描述了here)。
我的问题是:当我使用Visual Studio Web开发服务器(Cassini)在本地测试时,它可以很好地工作。但是,当我将它部署到我的测试服务器(带有IIS标准配置的Windows 2008以及其他所有服务器)时,它不起作用。
当我调用它并使用Firebug进行调试时,我得到一个HttpStatusCode 200作为返回而没有响应文本。使用Fiddler,我得到一个HttpStatusCode 504并且根本没有返回。但是,我期望的行为(以及本地发生的行为)是调用带有responseText设置的ajax调用的错误回调。
我远程调试它,一切看起来都很好。执行管道是正常的,所有类都被调用,因为它们应该就像在本地一样,除非它不起作用。
有什么建议吗?我几乎没有选择来解决这个问题。
非常感谢!
答案 0 :(得分:0)
如果firebug和fiddler给出不同的结果,如果你直接telnet到它并执行请求会发生什么(如:):
GET /VirtualDirectoryAndGetData HTTP/1.1
HOST: example.com
[carriage return]
如果你以某种方式获得奇怪的标题/格式化(解释为什么firebug / fiddler不同意),我不会感到惊讶
要测试的另一件事是发布到您的开发机器,看看它是机器特定问题还是服务器vs开发网络服务器问题。
如果它发生在VS以外的任何地方,您也可以尝试注释掉您设置的行
rmp.StatusCode = System.Net.HttpStatusCode.BadRequest;
rmp.StatusDescription = "Bad request";
这可能表明它是响应代码问题还是错误处理程序问题。
如果您可以编辑问题以包含结果(删除敏感信息),我们会看看是否可以进一步跟踪它。
再次查看问题之后,编辑,可能是服务器在发送任何响应之前发生错误。 FF可能默认为200,而ie可能假定为504(网关超时)。这是完全的推测,但是可能。你在事件日志中看到了什么吗?
答案 1 :(得分:0)
我有一个类似的问题,我能够解决。看一下IIS设置。有关如何克服此问题的详细信息,请参阅此帖:IErrorHandler returning wrong message body when HTTP status code is 401 Unauthorized