SOAP Webservice Call提供'Access-Control-Allow-Origin'

时间:2016-07-12 07:59:56

标签: angularjs soap cors

我正在开发一个使用第三方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”标头   资源。因此,不允许原点'null'访问。

我通过在Chrome中安装Allow-Control-Allow-Origin:*扩展程序尝试了同样的调用,但它运行正常。

我知道此Chrome扩展程序允许从任何来源请求任何包含ajax的网站,添加到回复Allow-Control-Allow-Origin: *标题

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

有没有其他方式调用此方法而不会遇到此CORS问题而不是从服务器处理它?<​​/ p>

3 个答案:

答案 0 :(得分:0)

简而言之,没有办法全面实现这一目标。有些客户端不会检查CORS标头,但对于那些用户,您必须在服务器端修复它。如果有一种方法可以在客户端进行,那么它将破坏CORS的整个目的

答案 1 :(得分:0)

在阅读了一些文章和少数R&amp; D步骤后,找到了解决方案。这有两种可能性。

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

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

  2. 右键单击要启用CORS的站点,然后转到 属性

  3. 更改为“HTTP标头”标签

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

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

  6. 输入*作为标题值

  7. 单击“确定”两次

  8. 如果我们无法控制服务器,我们可以通过模拟服务实现它。这个模拟服务仅用于调用我们无法控制的服务。

    希望这会对你有所帮助。

答案 2 :(得分:-1)

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

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