从Sonic ESB调用WCF服务时出错404

从Sonic ESB调用WCF服务时出错404,wcf,esb,sonic,Wcf,Esb,Sonic,我们有一个WCF服务,工作正常,有4个客户使用这项服务没有问题,但我有一个客户,他抱怨在过去的几天里他不能再打电话给网络服务 自10月份以来,我们没有改变任何事情,他也声称他没有改变任何事情 正如我所说的,我有其他客户在使用这项服务,我们也可以从soapui调用这项服务。我们甚至尝试在AWS中创建一个新的隔离机器,并调用该服务,以确保它不像防火墙问题那样阻止来自网络外部的通信 从他发给我的堆栈跟踪中可以看出,这位客户使用Sonic ESB调用我们的服务。我真的不明白Sonic ESB是如何工作的

我们有一个WCF服务,工作正常,有4个客户使用这项服务没有问题,但我有一个客户,他抱怨在过去的几天里他不能再打电话给网络服务

自10月份以来,我们没有改变任何事情,他也声称他没有改变任何事情

正如我所说的,我有其他客户在使用这项服务,我们也可以从soapui调用这项服务。我们甚至尝试在AWS中创建一个新的隔离机器,并调用该服务,以确保它不像防火墙问题那样阻止来自网络外部的通信

从他发给我的堆栈跟踪中可以看出,这位客户使用Sonic ESB调用我们的服务。我真的不明白Sonic ESB是如何工作的,但我猜错误是由Sonic ESB引起的,而不是我的服务。这就像在他的应用程序和我的服务之间创建了一个“适配器”

这使我得出以下结论:

1) 查看他的请求XML(他发给我的),我发现它与我提供的WSDL不匹配,例如:

(由于明显的原因,我很少更改名称和值)

-->这将只是CreateOrderGateway
-->这个标题似乎是Sonic ESB特有的,与我们无关
123414714
5411251
电子束
[此处为ip号码]
1fd5a3f4d8f4dsa5f4dsaf4dsf1da5.xyz
xyz-->这将是“活动ID”
...
...
2016-12-21-->这将是“日期”
...
因此,我只能得出结论,在这个过程中的某个地方,ESB将以我的服务所期望的正确SOAP请求格式转换这个奇怪的XML

2) 查看他发送给我的异常堆栈跟踪,我可以看到404错误:

<?xml version="1.0" encoding="UTF-8"?>
<exception xmlns="http://www.sonicsw.com/sonicesb/exception">
 <message>Exception while retrieving soap envelope from response: 
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Not Found&lt;/TITLE&gt;
&lt;META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"&gt;&lt;/HEAD&gt;
&lt;BODY&gt;&lt;h2&gt;Not Found&lt;/h2&gt;
&lt;hr&gt;&lt;p&gt;HTTP Error 404. The requested resource is not found.&lt;/p&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
</message>
 <class>com.sonicsw.xqimpl.invkimpl.wsif.providers.axissoap.SoapProviderInvocationException</class>
 <detail/>
 <stackTrace><![CDATA[org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
...

从响应检索soap信封时发生异常:
!DOCTYPE HTML PUBLIC“-//W3C//DTD HTML 4.01//EN”http://www.w3.org/TR/html4/strict.dtd"
HTMLHEADTITLENot未找到/标题
META HTTP-EQUIV=“Content Type”Content=“text/html;charset=us ascii”/HEAD
未找到bodyh2/h2
hrpHTTP错误404。找不到请求的资源。/p
/正文/HTML
com.sonicsw.xqimpl.invkimpl.wsif.providers.axisoap.SoapProviderInvocationException
问题是,他得到的404 HTML代码作为响应并不是来自我的服务器,因为我们使用的是IIS 8.5,IIS的404错误页面与此不同,HTML不同,消息也不同。可能是这样的:

“404-找不到文件或目录。 您正在查找的资源可能已被删除,名称已更改,…”


那么,有没有人知道这个声波ESB实际上在应用程序中间创建适配器还是代理?如果有人已经经历过这样的错误,原因是什么?我100%肯定我的服务运行良好。

您的客户是否发送了实际发送的soap请求? 他可以启用实际的webservice调用(最简单的方法是从管理控制台进行)

在知道发送的确切soap请求之后,调试将更容易


我还建议您在服务器测试时放弃一些请求,以在中间进行任何其他修改。

< P>您的客户是否发送了正在发送的实际SOAP请求? 他可以启用实际的webservice调用(最简单的方法是从管理控制台进行)

在知道发送的确切soap请求之后,调试将更容易


我也建议您在服务器测试时放弃一些请求,在服务器中放弃任何其他修改都是在中间进行的。

证明我的服务器上的网络跟踪(WiReSARK)显示我的客户的代理正在修改请求的“主机”,例如,而不是

主持人:ourdomain.com

它被修改成

主持人:proxy.customer.com:8080

因此,当此请求到达IIS服务器时,绑定被配置为“ourdomain.com”,然后它放弃了该请求。出于某种奇怪的原因,一个名为“MicrosoftHttpai”的家伙返回了回复,其中包含我的客户在他们的应用程序上看到的404错误页面


因此,我们已经修复了更改IIS绑定的问题,因为我不想等待我的客户调查他的代理对主机名做了什么。

事实证明,我服务器上的网络跟踪(wireshark)显示,我客户的代理正在修改请求的“主机”,而不是

主持人:ourdomain.com

它被修改成

主持人:proxy.customer.com:8080

因此,当此请求到达IIS服务器时,绑定被配置为“ourdomain.com”,然后它放弃了该请求。出于某种奇怪的原因,一个名为“MicrosoftHttpai”的家伙返回了回复,其中包含我的客户在他们的应用程序上看到的404错误页面


因此,我们已经解决了更改IIS绑定的问题,因为我不想等待我的客户调查他的代理对主机名到底做了什么。

Hi Carlos,现在我已经看到了您的答案,我的服务器中的跟踪显示主机名发生了修改!无论如何谢谢你!你好,卡洛斯,现在我已经看到了你的答案,我的服务器中的跟踪显示了主机名的修改!无论如何谢谢你!
<?xml version="1.0" encoding="UTF-8"?>
<exception xmlns="http://www.sonicsw.com/sonicesb/exception">
 <message>Exception while retrieving soap envelope from response: 
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Not Found&lt;/TITLE&gt;
&lt;META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"&gt;&lt;/HEAD&gt;
&lt;BODY&gt;&lt;h2&gt;Not Found&lt;/h2&gt;
&lt;hr&gt;&lt;p&gt;HTTP Error 404. The requested resource is not found.&lt;/p&gt;
&lt;/BODY&gt;&lt;/HTML&gt;
</message>
 <class>com.sonicsw.xqimpl.invkimpl.wsif.providers.axissoap.SoapProviderInvocationException</class>
 <detail/>
 <stackTrace><![CDATA[org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
...