c# - SOAP 消息被截断和标头重复的原因?
问题描述
我有一个向我们的客户端服务器发出 SOAP 请求的 Web 服务(我无权访问该服务器,也不知道 Web 服务方法是如何实现的)。
我们的代码最近没有更改,之前运行正常(大部分情况下仍然有效),但客户报告说,由于“重复的 XML 声明,我们的许多请求每天都失败了至少一个月” 记录在 Data Power 中。
他们收到的 SOAP 消息被截断(大量数据丢失),并且在 XML 的末尾,最初的 SOAP 标头是重复的。看起来他们部分收到了消息,然后发生了一些错误,然后尝试重新处理它,但又失败了。基本上它看起来像这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendData>
<requestHeader>
//PARTIAL INFORMATION INCLUDED HERE
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendProspect xmlns="http://webservices.zurich.com/zsoa/fig/policyacquisition/prospectquote-v1_0">
<requestHeader>
什么可能导致 SOAP 消息被截断?我正在考虑客户端和服务器之间的某种通信错误,或者 Web 服务器可能发生更改,但我想知道其他人是否遇到过这个问题并可以提供一些建议。
编辑:添加了从客户端收到的 HTTP 标头:
POST <webservice> HTTP/1.1
http_racfid: <info>
SOAPAction: ""
MULE_ENCODING: UTF-8
Host: <hostInfo>
Connection: keep-alive
Accept: */*
Content-Type: text/xml
Content-Length: 41341
解决方案
duplicate XML declaration
在 DataPower 中,当您的处理策略中有一个样式表操作未检测到有效的 XML 并且它试图“修复”它时,通常会发生这种情况。这表明您没有从服务器获得完整的 XML。
为服务启用 Probe 并查看 INPUT xml。
您还可以default
按照评论中的建议在域中启动数据包捕获或启动文件捕获以获取任何消息。注意!数据包捕获和文件捕获都会对性能造成严重影响,因此您不应该在大批量生产环境中这样做!
另一种获取“真实”INPUT 的侵入性较小的方法是在将 INPUT 写入temporary:///
您可以查看的文件的 Match 操作之后直接添加 GatewayScript 操作。这是“更安全”的,因为temporary:///
存储会自行清理......
推荐阅读
- r - fit_transform(tfidf, lsa) 返回错误
- javascript - Firebase 函数向主题发送消息
- tensorflow - ValueError:未知层:QuantizeLayer
- python - 如何配置 paho mqtt 订阅以高速获取数据,例如每秒 1000 条消息
- javascript - 谷歌脚本`SlidesApp.openById`或`SlidesApp.openByUrl`返回空对象`{}`
- ssl - server.xml 中的密码配置
- ruby - 我们如何对大哈希进行分页?
- javascript - Sinon 存根抛出“TypeError:无法重新定义属性”
- c++ - typeid() 返回错误的类型
- c# - 使用 NSIS 部署 C# Winforms 应用程序时,如何使用 Properties.Settings?