0

在我们的测试服务器上,当我尝试访问托管在 IIS 中的 WCF 服务的 URL 时,我收到 HTTP 400 错误。当我查看服务器上的 WCF 日志时,它指出“无法读取消息正文,因为它是空的”。如果我尝试为同一服务器上的另一个服务做同样的事情,它工作正常,我得到了 WSDL 的路径。

我也无法通过 SoapUI 连接到 WSDL。但是,我可以从 Visual Studio 连接到该服务。

我看到的大多数帖子都提到需要httpGetEnabled="true"在配置文件中。该属性存在于测试服务器的 web.config 中。

其他帖子提到需要额外的属性,但我不明白如果生产服务器在没有它们的情况下工作,为什么需要它们。

编辑以回应 Davin:这是 Fiddler 对生产请求的原始视图 GET http://production.svc HTTP/1.1 Accept: text/html, application/xhtml+xml, / Accept-Language: en-US User-代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)接受编码:gzip,放气连接:保持活动主机:生产

这是 Fiddler 对测试请求的原始视图 GET http://test.svc HTTP/1.1 Accept: text/html, application/xhtml+xml, / Accept-Language: en-US User-Agent: Mozilla/5.0 (兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)接受编码:gzip,放气连接:保持活动主机:测试

这是试图使用 IE9 连接到服务。

致 CodeCaster:它使用框架 4 并在 asp.net v4.0 应用程序池中运行。框架 4 安装在服务器上。如果我使用我设置的测试应用程序,我可以连接到该服务并向其中一种方法发送请求并且它工作正常。

我的问题是使用 IE 或soapUI 连接到服务,因为我们的供应商在他们能够这样做之前不会在他们的测试系统上更新他们的端点。

4

1 回答 1

0

HTTP 400 是一个BadRequest. 当服务器因为无法处理请求而拒绝请求时会抛出此错误。您收到的错误消息在这种情况下是有意义的。这也意味着服务器能够找到您的端点。所以,问题可能不在于httpGetEnabled.

您需要做的是查看发送到服务器的 HTTP 消息。为此,我建议将您的客户端指向代理(提琴手),然后配置提琴手以将请求转发到服务器。然后,您需要确保请求采用您期望的格式。

于 2013-03-12T15:05:11.763 回答