我正在使用AngularJS尝试从SSRS下拉报告列表以显示在iframe中。我遇到的问题是我在执行POST请求时遇到SOAP错误。
这是Angular控制器看起来正在进行POST的内容。
function ReportSSRSController($scope, $http, $location) {
$scope.request = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
+ '<soap:Body>'
+ '<m:ListChildren xmlns:m="http://example.com/ReportingServer/ReportService2010">'
+ '<m:ItemPath>/reports</m:ItemPath>'
+ '<m:Recursive>false</m:Recursive>'
+ '</m:ListChildren>'
+ '</soap:Body>'
+ '</soap:Envelope>';
$http({
method: 'POST',
url: '/ReportServer/ReportService2010.asmx',
data: $scope.request,
headers: {
'Content-Type': 'application/soap+xml; action="http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer/ListChildren"'
}
})
.success(function(data, status, headers, config){
console.log('In Success');
$scope.data = data;
})
.error(function(data, status, headers, config){
console.log('In Error');
console.log(data);
console.log(config);
});
}
这是SOAP错误错误的要点。
System.Web.Services.Protocols.SoapException:未指定参数“ItemPath”的值。它在函数调用中丢失,或者设置为null。
正如您在Angular代码中所看到的,ItemPath
包含在SOAP主体中与函数调用相同的命名空间中。我也可以在控制台中看到它作为错误块中data
变量的输出。所以我想知道为什么它无法找到这些信息。
Angular处理POST请求的方式是否有我遗漏的东西?或者我没有正确制定SOAP请求?
答案 0 :(得分:2)
事实证明,该问题与SOAP XML中的命名空间有关。
当我将命名空间更改为
时http://schemas.microsoft.com/sqlserver/reporting/2010/03/01/ReportServer
匹配SOAP操作(减去最后的命令);请求返回了有效的SOAP响应。
我不确定这是否是SOAP或SSRS的限制,因为我对这两者都不是很熟悉。