6

我正在尝试在 ssrs(XML 源)中使用 webapi。

如果将在 url 中使用参数(用于测试目的),那么它的工作非常好,例如 - http://some_xyz_url.com/Api/Report/GetReport?id=7。所以我可以在 SSRS 中使用 web api

真正的问题- 我不知道如何将参数从 SSRS 传递给 webapi。我很努力,但没有运气。我也搜索了stackoverflow,没有任何问题接近我的要求。

我正在使用 VS2012,(.net framework 4.0),SQL server 2008(使用 Microsoft SQL server 报表生成器)

任何帮助都非常感谢。

当我尝试将参数从 SSRS 传递到 webapi 时,我已经上传了错误消息。

在此处输入图像描述

更新

我试图传递参数,但由于某种原因,参数的值始终为空,即使在设置了默认值之后也是如此。(见下附的jpg)

在此处输入图像描述

这就是我传递参数的方式

在此处输入图像描述

但仍然得到 404 (但我将使用硬编码的 Id ,它在浏览器中工作正常)

请指教。

4

4 回答 4

6

连接字符串可以是表达式。因此,您可以创建一个参数并将您的数据源连接字符串设置为:

="http://some_xyz_url.com/Api/Report/GetReport?id=" & Parameters!ReportParameter1.Value
于 2013-11-05T19:48:56.763 回答
1

对于“数据源”的 XML 源,我已经使用 WCF 完成了它,如果您想为您获取的数据使用 Web 服务并且只想传递参数,我认为这与您所描述的类似进入您正在进行的方法调用的签名。

使用 SSRS 使用 Web 服务时的四件事:

  1. 您需要将数据源设置为使用 XML(看起来您已经掌握了该部分)。
  2. 您的 Web 服务必须使用基本 HTTP 作为其绑定类型。
  3. 如果您正在使用服务,则“连接字符串”需要是服务地址。EG 对于本地托管服务,它将是:

    http: //localhost/Reporting/ReportService.svc
    

    对于部署在我的默认目录下的服务,项目名为“报告”,服务接口为 ReportService。我还将测试您是否可以通过尝试寻找并确保它正常工作来在 Visual Studio 中使用此服务。或者,如果它是可发现的,请使用浏览器找到它。

  4. 一旦我有了这个,我需要创建一个正确查询此服务的“数据集”。MS 有一个执行此操作的“查询”xml blob。如果您有参数,您的服务将使用它在“参数”节点中列出它们很重要。

    <Query>
    <Method Name="GetStateLike" Namespace="http://tempuri.org/">
    <Parameters>
    <Parameter Name="state"></Parameter>
    </Parameters>
    </Method>
    <SoapAction>
    http://tempuri.org/IReportingService/GetStateLike
    </SoapAction>
    </Query>
    

大部分的问题是它的消费有多精致。我让它工作,但认为它太脆弱了,我不想最终用它来解决我的问题。更多信息也在这里: 如何使用 SSRS 2008 R2 使用 WCF 服务

于 2013-11-05T22:53:13.203 回答
1

经过长时间的尝试,我无法解决这个问题,这是我最后遵循的,它可以工作我无法更改 web api,所以我在使用 webapi 的解决方案中添加了一个 wcf 服务(只是一个包装器)。我知道 wcf 包装器并不明智,但它解决了将参数传递给 webapi 的目的。

然后我在我的 SSRS 应用程序中使用 wcf 服务。

于 2013-11-21T11:39:41.987 回答
0
<Query>
   <Method Name="TransformData" Namespace="http://tempuri.org/">
   <Parameters>
       <Parameter Name="parameters">
           <DefaultValue>[@PARAMETER NAME]</DefaultValue>
       </Parameter>
            --- similarly pass more params here
   </Parameters>
   </Method>
<SoapAction>http://tempuri.org/ControllerORInterface/MethodName
</SoapAction>
   <ElementPath IgnoreNamespaces="true">
TransformDataResponse{}/TransformDataResult{}/diffgram{}/NewDataSet{}/yourdatasetname{all columns returned from service(comma-separated)}
</ElementPath>
</Query>
于 2020-01-30T11:37:12.587 回答