【问题标题】:SOAP Webservice Call gives 'Access-Control-Allow-Origin'SOAP Web 服务调用提供“访问控制允许来源”
【发布时间】:2016-11-14 08:31:24
【问题描述】:

我正在开发一个使用第三方 SOAP Web 服务的 Angular Web 应用程序。

我正在使用 Angualr-soap 进行 SOAP 调用。

Angularjs 服务代码:

var app = angular.module('app', ['angularSoap']);

app.config([
    '$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }
]);

app.factory("CallSOAPService", ['$soap', function ($soap) {
    var baseListUrl = "http://***.***.***.***/WebBooking/ListingServices.asmx";

return {
    getCityList: function () {
        return $soap.post(baseListUrl, "GetCityList");
    }
}

}]);

app.controller('MainCtrl', ['$scope', 'CallSOAPService', 
    function ($scope, CallSOAPService) {
    CallSOAPService.getCityList().then(function (response) {
        console.log(response);
    }, function() {
        console.log("Something went wrong!");
    });

}]);

它给了我以下错误:

XMLHttpRequest 无法加载 http://.../WebBooking/ListingServices.asmx?wsdl.不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许访问 Origin 'null'。

我通过在 chrome 中安装 Allow-Control-Allow-Origin:* 扩展来尝试相同的调用,它工作正常。

我知道这个 chrome 扩展允许从任何来源请求任何带有 ajax 的站点,添加到响应 Allow-Control-Allow-Origin: * 标头

我在 ASP.NET Web 窗体应用程序中尝试了相同的 URL,但它没有给我这个 CORS 问题。

除了从服务器处理它之外,还有没有其他方法可以在没有得到这个 CORS 问题的情况下调用它?

【问题讨论】:

  • 如果你想要一个明确的解决方案,你必须在服务器端采取行动
  • 问题是我无法控制服务器端。我可以请求它,但它需要一些时间才能在服务器中得到纠正。
  • 可以在后端服务器前面放一个代理
  • 放置代理服务器是什么意思?

标签: angularjs soap cors


【解决方案1】:

简而言之,没有办法全面做到这一点。有些客户端不会检查 CORS 标头,但对于那些这样做的,您必须在服务器端修复它。如果有办法在客户端执行此操作,它将破坏 CORS 的全部目的

【讨论】:

  • 当我通过 ASP.Net Web Forms 应用程序发出请求时,它不会给我这个错误,当我在 Allow-Control-Allow-Orgin:* 扩展时调用 Web 服务时也是如此。我能从中得到什么吗?
【解决方案2】:

在阅读了几篇文章和几个研发步骤后,找到了解决方案。这有两种可能性。

作为最佳选择,我们可以启用 CORS 表单服务端。为此,我们可以按照以下步骤操作。

  1. 打开 Internet 信息服务 (IIS) 管理器

  2. 右键单击要为其启用 CORS 的站点并转到 属性

  3. 更改为 HTTP 标头选项卡

  4. 在自定义 HTTP 标头部分,单击添加

  5. 输入 Access-Control-Allow-Origin 作为标题名称

  6. 输入 * 作为标头值

  7. 点击确定两次

如果我们无法控制服务器,我们可以通过模拟服务来实现。该模拟服务仅用于调用我们无法控制的服务。

希望这会对你有所帮助。

【讨论】:

    【解决方案3】:

    在配置块中,您可以使用:- $httpProvider.defaults.useXDomain = true; 删除 $httpProvider.defaults.headers.common['X-Requested-With'];

    但是,它也需要从服务器进行配置才能工作

    【讨论】:

    • 我也试过了。请检查更新的问题。谢谢
    猜你喜欢
    • 2017-06-19
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多