【发布时间】:2017-07-07 17:58:24
【问题描述】:
我有一个令人困惑的问题。我有 Web 服务 A(以下称为 WSA),一个 3.5 .Net WCF,我添加了对 Web 服务 B(以下称为 WSB)的调用,它是一个 3.5 .Net ASMX。在客户端(SOAPUI 或 WCFStorm)中运行 WSA 时,WSB 调用根据客户端超时设置超时。
在 VS 事件查看器中,我可以看到对 WSB 的调用立即引发了两个错误 400:
抛出异常:System.dll 中的“System.Net.WebException”(“远程 服务器返回错误:(400)错误请求。”)。抛出异常: System.dll 中的“System.Net.WebException”(“远程服务器返回 错误:(400)错误请求。”)
没有给出任何理由。让我感到困惑的是错误并没有引起我的注意。当我调试并点击调用 WSB 的代码行时,就像重置一样。我的 WSA 不会再执行任何代码,也不会抛出任何错误。
如果我直接调用 WSB,它可以工作。因此,WSB 没有任何问题。在同事的建议下,我采用了特定于我的更改的代码并将其放入独立服务中。我确实 C&P 特定于我的代码和配置设置,并调整命名空间和类名。瞧,它起作用了。我的名为 WSB 的独立 Web 服务很好,可以得到我期望的数据。
我和一位同事检查了 WSB 所在的 IIS 服务器上的日志(服务的 IIS 日志和 HTTPERR 日志),以查看是否提到了 400 错误。我们没有找到。
所以我们在这一点上有点困惑。我们唯一能想到的可能是网络配置中的某些东西可能会产生干扰,但不知道它可能是什么。
如果您对其他地方有什么建议会有所帮助。
很高兴知道为什么它没有落入我的错误处理程序中。
谢谢。
更新:有人要求我添加配置和代码。老实说,我认为这不会有帮助,而且非常简单。由于公司原因,我不能放真正的代码,但基本上是这样的:
在网络配置中:
<configuration>
<appSettings>
<add key="endpointUrl" value = "someurl" />
</appSettings>
.
.
.
<applicationSettings>
<MyService.Properties.Settings>
<setting name="MyService_TheirService"
serializeAs="String">
<value>someurl</value>
</setting>
</MyService.Properties.Settings>
</applicationSettings>
即使数据非常小,我也尝试过进行大型阅读器设置等:
<binding name="CustomHtttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" >
<readerQuotas maxDepth="128"
maxStringContentLength="8388608"
maxArrayLength="2147483646"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
</binding>
代码:
using MyService.TheirService
.
.
.
var theirURL = ConfigurationManager.AppSettings["endpointUrl"];
var oSvc = new TheirServiceObject
{
Url = theirURL
};
int numberIneed = oSvc.SomeMethod();
最后一行是抛出 400 的地方。
更新 2:
一位同事向我展示了如何使用 Fiddler。我现在可以看到对 WSB 的请求绝对是垃圾。
xڭ s 6 mr!!u \ .3 5'3 G QOH>Iп kX M3 ~vY ) X e Z w ~ :jv -˴wڽHb Yqv A :(Q Z; >9W O0g 6 .ɖVlU Ţ 8Z
一些奇怪的编码?至少这是另一个线索。
【问题讨论】:
-
发布一些代码和配置部分会有所帮助,否则您很可能会得到我们非常笼统且可能没有帮助的唯一答案。
标签: web-services wcf bad-request