2017-07-07 235 views
0

我有一个令人困惑的问题。我有Web服务A(以下称为WSA),一个3.5 .Net WCF,我添加了一个调用Web服务B(以下称为WSB)的3.5.Net ASMX。在客户端(SOAPUI或WCFStorm)中运行WSA时,WSB呼叫按客户端超时设置超时。Web服务错误400 - 错误请求

在VS事件查看器,我可以看到调用WSB立即引发两个误差400S:

Exception thrown: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request."). Exception thrown: 'System.Net.WebException' in System.dll ("The remote server returned an error: (400) Bad Request.")

没有理由给出。同样令人费解的是,这个错误并没有引起我的注意。当我调试时,我点击调用WSB的代码行,就像重置。没有进一步的代码被执行,我的WSA也没有发生错误。

如果我直接调用WSB,它将起作用。所以WSB没什么问题。在同事的建议下,我采用了特定于我的更改的代码,并将其放在独立的服务中。我实际上是C代码并配置特定于我的设置并调整命名空间和类名称。瞧,它看起来很有效。我的WSB独立Web服务很好,并获得了我期望的数据。

的同事,和我检查日志(IIS日志服务和HTTPERR日志)是WSB驻留,看看是否有是400错误的任何提及,在IIS服务器上。我们没有发现。

所以我们种困惑在这一点上。我们唯一能想到的可能是web配置中的某些东西可能会干扰,但不知道它可能是什么。

如果你有还有什么地方看,这将是有帮助的任何建议。

而且这将是很好知道为什么它没有落入我的错误处理程序。

谢谢。

更新:有人要求我添加配置和代码。我不认为这会对你有所帮助,而且非常简单。我不能把真正的代码。由于公司的原因,但它基本上是这样的:

在web配置:

<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 < ( t eSv U]r R $N \

一些奇怪的编码?至少这是另一个线索。

+0

发布一些代码和配置部分将是有益的,否则唯一的答案你最有可能会得到我们非常一般的,可能没有帮助。 – Tim

回答

0

想让你知道这个问题已经解决了。另一个曾在此服务上工作过的开发者,但不再碰巧遇到了,我说:“嘿!看看这个!“

他们看到垃圾请求数据并说:”看起来像压缩。在项目中查找压缩文件“

结果出现了一个自定义压缩组件,它压缩了服务的传出数据,并且需要添加2行代码以进行解压缩。将这些行添加到我的顶部之后方法都立刻奏效。

这里的教训是,如果你的项目是做违抗原因,一些奇怪的东西,试图找到尽可能多的人,你可以上它,即使他们没有工作就可以了之前的工作。