【发布时间】:2019-11-29 18:22:32
【问题描述】:
我已经在 nodejs 中使用使用 wsdl 项目的库“soap”构建和 api。
我正在尝试发帖,但在响应正文中我收到此错误:服务器无法为请求提供服务,因为媒体类型不受支持;同样在响应正文中,我有此消息: 无法处理该消息,因为内容类型为 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml;字符集=utf-8。我做了一些研究,发现这是服务器和客户端之间的soap版本问题。
我试试这个:
- 创建soap客户端时添加forceSoap12Headers:false反之
- 将带有接受内容和内容类型的soap库重写为:text/xml; charset=utf-8,也改变所有属于soap v1.1的scheme
- 尝试在请求中添加 httpHeader 'Accept' 'text/xml'
这是我的代码的一部分:
MethodTest: async function(wsdl){
try{
var client = soap.createClient(wsdl,{forceSoap12Headers:false},async (err,result)=>{
if(err){
}else{
var descripcion = await this.ServiceDescription(wsdl);
if(!descripcion.error){
var body = { _xml: "<i0:GetAccountBalance>"+
"<i0:dc>"+
"<i0:RequestId>000</i0:RequestId>"+
"<i0:SystemId>WEB</i0:SystemId>"+
"<i0:SourceId>AR</i0:SourceId>"+
"<i0:AccountNumber>42526372</i0:AccountNumber>"+
"</i0:dc>"+
"<i0:dcSecurity>"+
"<i0:WebUser>NDsVwQwRbwbuY / DcX2PRGw ==</i0:WebUser>"+
"<i0:WebPassword>/d8zOcR9K9xqpl8CdhUJrw==</i0:WebPassword>"+
"</i0:dcSecurity>"+
"</i0:GetAccountBalance>"}
try{
var response = await (result[descripcion.metodos[8]+"Async"])(body)
}catch (e){
console.log(e.response)
}
}
}
})
【问题讨论】:
-
我真的很惊讶有人还在使用 SOAP。
-
知道这里发生了什么吗?我卡住了
-
我不熟悉如何设置soap,但看起来你的服务器无法访问text/xml。这就是您的前端发送的内容。也许将 text/xml 作为接受的内容类型添加到您的服务器标头?
-
或尝试添加
content-type: application/soap+xml作为您的请求内容类型。 -
@zyrup 我想这不应该让我感到惊讶。我的意思是,一些大型机仍在 COBOL 上运行,SOAP 是相当于 COBOL 的 Internet 数据传输协议。
标签: javascript node.js api soap wsdl