【问题标题】:Consume web api in SSRS with parameter使用参数在 SSRS 中使用 web api
【发布时间】:2013-11-05 13:29:29
【问题描述】:

我正在尝试在 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,它在浏览器中工作正常)

请指教。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我试过了,但没有运气,再次得到......远程服务器返回错误:(400)错误请求。 请求无效。参数字典包含一个 null 条目,用于方法 GetReport(Int32) 的不可为空类型 'System.Int32' 的参数 'Id' 可选参数必须是引用类型、可空类型或声明为可选参数。 ------------------------ ---- 对指定 URL 执行 Web 请求失败。错误请求:远程服务器返回错误:(400)错误请求。
    • 我在我的问题中添加了更多的 cmets,请看一下。感谢您的帮助。
    • 从您的屏幕截图中,您似乎缺少 = 和 ",请尝试完全按照此处的提示使用:="localhost:5698/api/Report?id=" & Parameters!Id.Value
    • 我试过了,但现在我得到了 - 无法在设计时评估连接字符串表达式。您必须预览或部署报告以验证连接。
    • 我也一样,点击“确定”保存连接,当我点击“运行”时,它按预期工作:/
    【解决方案2】:

    对于“数据源”的 XML 源,我已经使用 WCF 完成了它,如果您想为您获取的数据使用 Web 服务并且您只想将参数传递到您正在进行的方法调用的签名中。

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

    1. 您需要将数据源设置为使用 XML(看起来您已经掌握了该部分)。
    2. 您的 Web 服务必须使用基本 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>
      

    大部分问题在于它的消费程度。我让它工作,但认为它太脆弱了,我不想最终用它来解决我的问题。更多信息也在这里: How to consume a WCF service with SSRS 2008 R2

    【讨论】:

    • 感谢您的详细回答,我已经在之前的项目中使用 SSRS 2008 R2 使用 WCF 服务,但是在此我们没有使用 wpf,我们有 wep api,我在使用它时遇到了问题。
    • 这太糟糕了,很抱歉它的处理方式不同。我想知道您是否升级到 2012 是否会有所作为?我知道他们在 Web 服务上做了一些小的改动,但在产品设计师或报告格式上并没有那么大。也许尝试使用高级工具的 SQL 2012 实验室。抱歉,我无法提供更多帮助。
    • 感谢您的所有帮助
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      <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>
      

      【讨论】:

        猜你喜欢
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多