SSRS - 将复杂参数传递给 Web 服务



我正在尝试从 Web 服务获取数据以放入 SSRS 报告中。

下面是使用简单字符串参数的数据集(参数在数据集属性中设置(:

<Query xmlns="http://tempuri.org/">
<Method Name="ValidateUserWSToken" Namespace="http://tempuri.org/" />
<SoapAction>http://tempuri.org/WSTokenService/ValidateUserWSToken</SoapAction>  
</Query>

这是一个类似的方法,它需要其参数的复杂类型

<Query>
<Method Name="GetUserWSToken" Namespace="http://tempuri.org/"/>
<SoapAction>http://tempuri.org/WSTokenService/GetUserWSToken</SoapAction>
</Query>

将数据集属性中的参数作为

<UserName>username</UserName><Password>password</Password>

给出错误"尝试反序列化参数 http://tempuri.org/:request 时出错。内部异常消息是"第 5 行位置 20 中的错误。预期状态"元素"..遇到名称为"、命名空间为"."的"文本"。我认为在数据集属性中设置它不起作用。

我已经尝试了以下内容的变体,以尝试将参数放在查询文本中

<Query>
<Method Name="GetUserWSToken" Namespace="http://tempuri.org/" />
<SoapAction>http://tempuri.org/WSTokenService/GetUserWSToken</SoapAction>
<Parameters>
<Parameter Name="request" type="xml">
<DefaultValue xmlns:a="some namespace">
<a:Password>password</a:Password>
<a:UserName>username</a:UserName>
</DefaultValue>
</Parameter>
</Parameters>
</Query>

但这些都失败并显示 500 错误 - "对象引用未设置为对象的实例",大概是因为 Web 服务未找到参数或查找参数为 null。

这是 SoapUI 生成(和工作(的 XML。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:civ="some namespace">
<soapenv:Header/>
<soapenv:Body>
<tem:GetUserWSToken>
<!--Optional:-->
<tem:request>
<civ:Password>password</civ:Password>
<civ:UserName>username</civ:UserName>
</tem:request>
</tem:GetUserWSToken>
</soapenv:Body>
</soapenv:Envelope>

是否可以将其转换为可在 SSRS 查询文本中使用的内容?

这有效:

<Query>  
<Method Name="GetUserWSToken" Namespace="http://tempuri.org/">   
<Parameters>
<Parameter Name="request" Type="XML" xmlns="some namespace">
<DefaultValue>
<Password>password</Password>
<UserName>username</UserName>
</DefaultValue>
</Parameter>
</Parameters>
</Method>
<SoapAction>http://tempuri.org/WSTokenService/GetUserWSToken</SoapAction>
<ElementPath IgnoreNamespaces="true">*</ElementPath>
</Query>

这就是它被转换为的内容:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUserWSToken xmlns="http://tempuri.org/">
<request><Password xmlns="some namespace">Password123</Password><UserName xmlns="some namespace">FifeIntegrationUser</UserName></request>
</GetUserWSToken>
</soap:Body>
</soap:Envelope>

最新更新