【问题标题】:How do I connect to SOAP webservice with Javascript?如何使用 Javascript 连接到 SOAP 网络服务?
【发布时间】:2018-01-09 00:51:20
【问题描述】:

我几天来一直试图让 javascript 使用 SOAP 服务,但无法让它工作。它适用于 Excel、SOAP-UI、Fiddler、Flex,但不适用于 HTML/Javascript。 任何帮助将不胜感激。

到目前为止,我已经在Simplest SOAP example 看到了一个简单的示例。我按照那里的代码替换了我的 Web 服务的适当部分。我得到的所有错误似乎都指向常见的 CORS 错误。

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 403。

我环顾四周以找出为什么会这样,并尝试了各种解决方案,但都没有奏效。

这是我调用网络服务的代码

<script type="text/javascript">
    function soap() {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open('POST', 'https://myurl', true);

        // build SOAP request
        var sr =
        '<?xml version="1.0" encoding="UTF-8"?>' + 
    '<soap:Envelope ' +
    'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' + 
    'xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" ' + 
    'xsi:schemalocation="http://schemas.xmlsoap.org/soap/envelope/">' +
    '<soap:Body>' +
    '<mymethod xmlns="http://my.com/server/">' +
    '<Key>123456789</Key>' +
    '</mymethod>' +
    '</soap:Body></soap:Envelope>';

     xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4) {
                if (xmlhttp.status == 200) {
                    alert('done. use firebug/console to see network response');
                }
            }
        }
        // Send the POST request
        xmlhttp.setRequestHeader('Content-Type', 'text/xml');
        xmlhttp.setRequestHeader('Authorization', 'Basic myusername/password here');
        xmlhttp.send(sr);
    }
</script>

HTML 只是一个运行 javascript 的按钮。当我点击它时,我得到两个错误:

选项 xxxxxxxxxxxxxx 403(禁止)

(xxxxxxxxxxxxx 是我的网址)和

https://xxxxxxxxxxxxxxxxxxxxx:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 403。

任何想法为什么这不起作用?另一个大问题是为什么它在 Fiddler 中有效,而不是在我的网页上?我使用了 Fiddlers 作曲家选项卡并输入了与上面详述的几乎相同的信息,它工作正常。

谢谢。

【问题讨论】:

  • 在您的服务器上使用代理。 Fiddler 不像浏览器那样受 CORS 限制。该 API 未启用 CORS。使用代理可以轻松解决的常见问题
  • 好的,很好的信息。我会环顾四周,看看我能找到什么,如果我有更多问题,我会回来。

标签: javascript web-services soap cors fiddler


【解决方案1】:

如果有人来这里寻找答案,这就是我想出的。

根据上面的建议使用代理,我环顾四周,发现无法使用代理(该服务来自旧大型机,其他组件拼凑在一起)。但是,在这里建立这个想法就是我所做的。

我使用 ColdFusion 作为 Web 服务器。它能够使用 .NET dll。因此,我创建了一个 DLL 来访问 SOAP 服务并返回结果。我能够在 ColdFusion 页面中捕获这个结果(使用 jquery/javascript)并像我直接从 Javascript 调用它一样使用它。

所以,我想这可能是使用上面提到的 charlietfl 之类的代理的意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2021-07-04
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多