使用参数在SSRS中使用web api

时间:2013-11-05 13:29:30

标签: c# web reporting-services asp.net-web-api ssrs-2008

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

如果将在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时,我上传了错误消息。

enter image description here

更新

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

enter image description here

以下是我传递参数的方法

enter image description here

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

请告知。

4 个答案:

答案 0 :(得分:6)

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

="http://some_xyz_url.com/Api/Report/GetReport?id=" & Parameters!ReportParameter1.Value

答案 1 :(得分:1)

对于'数据源'的XML源我已经使用WCF完成了它,我认为如果你想为你正在获得的数据使用Web服务,你会想要的类似于你所描述的将参数传递给您正在进行的方法调用的签名。

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

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

    http: //localhost/Reporting/ReportService.svc
    

    用于在我的默认目录下部署的服务,其中包含名为“Reporting”的项目和具有ReportService接口的服务。我还测试你可以通过尝试寻找它并确保它正常工作来获得Visual Studio中的这项服务。或者,如果它是可发现的,请使用浏览器找到它。

  4. 有了这个,我需要创建一个'DataSet'来正确查询这个服务。 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>
    
  5. 问题的大部分是消费的微妙程度。我得到了它的工作,但认为它是如此脆弱我不想最终用于我的问题。这里还有更多内容: How to consume a WCF service with SSRS 2008 R2

答案 2 :(得分:1)

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

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

答案 3 :(得分: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>