【问题标题】:The server cannot service the request because the media type is unsupported Soap Nodejs服务器无法为请求提供服务,因为媒体类型不受支持 Soap Nodejs
【发布时间】:2019-11-29 18:22:32
【问题描述】:

我已经在 nodejs 中使用使用 wsdl 项目的库“soap”构建和 api。

我正在尝试发帖,但在响应正文中我收到此错误:服务器无法为请求提供服务,因为媒体类型不受支持;同样在响应正文中,我有此消息: 无法处理该消息,因为内容类型为 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml;字符集=utf-8。我做了一些研究,发现这是服务器和客户端之间的soap版本问题。

我试试这个:

  1. 创建soap客户端时添加forceSoap12Headers:false反之
  2. 将带有接受内容和内容类型的soap库重写为:text/xml; charset=utf-8,也改变所有属于soap v1.1的scheme
  3. 尝试在请求中添加 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


【解决方案1】:

我找到了。我有两个问题,在创建客户端服务时,默认端点设置错误,需要 Content-Type application/soap+xml;字符集=utf-8。我只是覆盖了端点,请求就OK了!!

【讨论】:

    【解决方案2】:

    对我来说,

    1. 我转到标题,取消选择原来的 Content-type
    2. 然后转到预设,点击管理预设
    3. 在那里,我单击了添加,然后在弹出窗口中
      一种。选择一个标题预设名称(任何方法都可以)
      湾。对于 key -- 输入 Content-type
      C。对于值 -- 输入 text/xml
      d。最后点击右下角的添加
    4. 关闭管理预设弹出窗口
    5. 点击您的新预设,然后在底部选择新的内容类型

    【讨论】:

    • 这非常有效。我想知道为什么直接将 Content-Type 添加为键不起作用,但使用此预设却...
    【解决方案3】:

    这就是我要解决的错误。首先转到标题:然后,如果您能够立即更改默认的内容类型值,从 application/xml 到 text/xml 尝试先编辑它。如果没有取消选中 content-type 复选框,并且在底部的同一列中,只需为 Key 键入 content-type,为 value 键入 text/xml。然后它工作完美!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多