如何使用带有xml的angular+8的soap asmx服务
Posted
技术标签:
【中文标题】如何使用带有xml的angular+8的soap asmx服务【英文标题】:How to consume a soap asmx service from angular+8 with xml on it 【发布时间】:2021-06-16 03:21:42 【问题描述】:这是我的电话:
var xmlItemAll =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
'<soap:Body>' +
'<GetDynamicData xmlns="http://tempuri.org/">' +
'<DynQueryID>FILE_ITEMS</DynQueryID>' +
'<CriteriaName>USN</CriteriaName>' +
'<CriteriaValue>50101497</CriteriaValue>' +
'</GetDynamicData>' +
'</soap:Body>' +
'</soap:Envelope>';
let headers = new HttpHeaders(
'Content-Type': 'application/xml',
);
const hdr = headers: headers, body: xmlItemAll ;
this.http.post('http://someURL:somePORT/FWebService.asmx?op=GetDynamicData', hdr)
.toPromise()
.then((result) =>
console.log(result)
我收到此错误:
肥皂:ReceiverServer 无法处理请求。 ---> 根级别的数据无效。第 1 行,位置 1。我做错了什么?
【问题讨论】:
【参考方案1】:问题很可能是这一行:
<?xml version="1.0" encoding="utf-8"?>
服务不喜欢该行并希望消息直接以 SOAP 信封开头,或者该行的第一个字符是不可打印的字符,例如 UTF-8 byte order mark (BOM)。您是否偶然从文件中复制了 SOAP XML?如果是这样,您可能已经选择了它的 BOM。
删除该行或删除并重写其第一个字符以尝试摆脱 BOM,然后再次调用。如果您将内容类型更改为以下内容,则不一定需要该行,以便服务器知道它是 UTF-8:
Content-Type: text/xml; charset="utf-8"
另外,使用text/xml
而不是application/xml
。
我要补充的另外两件事是:
从端点中删除?op=GetDynamicData
参数只是为了保持清晰。这通常是测试和获取有关 GET 操作的详细信息所需要的,而不是调用 POST 服务所必需的。
您可能还需要以SOAP action 的形式添加另一个HTTP 标头,例如SOAPAction: "Some-Value"
,否则您的服务可能会抱怨它。您添加的值必须与您正在调用的操作相匹配。
【讨论】:
好的。我尝试这个没有运气: 1.- 删除该行并将其写下来... 2. 删除它,将它放在header as: 'Content-Type': 'text/xml, charset="utf-8"' 3. 还要更改 text/xml 部分 4. 删除 ?op=GetDynamicData 并将其放在 header 中并最终为:let headers = new HttpHeaders( 'Content-Type': 'text/xml, charset="utf-8"', SOAPAction: 'op=GetDynamicData', );仍然有我提到的相同错误 也忘了提到我在邮递员中尝试了相同的代码,它就像一个魅力。但我不知道我是否忘记了角度请求中的某些内容。邮递员上有一个参数,您将此 xml 设置为“原始”和“XML”模式...不知道是否包含在 http.post 查看浏览器调试工具中的网络选项卡,查看请求是如何产生的。可能请求正文有问题。 仔细看你的通话,请求内容是用body
还是data
设置的?喜欢data: xmlItemAll
我审核了请求,似乎没问题。我复制了一些代码并放置了数据部分,不知道是数据还是正文。我已经改变了它,但仍然没有运气【参考方案2】:
也许这只是一个引用类型的问题。使用 ` 而不是 ' 或转义简单引号内的双引号,如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
【讨论】:
好吧,实际上我尝试了 ` 和 ' 和 " .... 以及所有单行,最后是 + 版本。但感谢您指出这一点。:)以上是关于如何使用带有xml的angular+8的soap asmx服务的主要内容,如果未能解决你的问题,请参考以下文章
如何设置soap请求对象为 application/soap+xml;charset=utf-8
无法处理消息,因为内容类型 'text/xml;charset=UTF-8' 不是预期的类型 'application/soap+xml;字符集=utf-8'
无法处理消息,因为内容类型为 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml;字符集=utf-8'