C# 使用带参数的SSRS中的web api

C# 使用带参数的SSRS中的web api,c#,web,reporting-services,asp.net-web-api,ssrs-2008,C#,Web,Reporting Services,Asp.net Web Api,Ssrs 2008,我试图在ssrs(XML源代码)中使用webapi 如果将在url中使用参数(用于测试目的),那么它的工作非常好,例如-。所以我可以在SSRS中使用web api 真正的问题-我不知道如何从SSR将参数传递给webapi。我努力了,但没有成功。此外,我已经搜索了stackoverflow,没有任何问题接近我的要求 我正在使用VS2012、(.net framework 4.0)、SQL server 2008(使用Microsoft SQL server报表生成器) 非常感谢您的帮助 当我试图将

我试图在ssrs(XML源代码)中使用webapi

如果将在url中使用参数(用于测试目的),那么它的工作非常好,例如-。所以我可以在SSRS中使用web api

真正的问题-我不知道如何从SSR将参数传递给webapi。我努力了,但没有成功。此外,我已经搜索了stackoverflow,没有任何问题接近我的要求

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

非常感谢您的帮助

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

更新

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

下面是我如何传递参数的

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


请注意。

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

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

对于“数据源”的XML源,我已经使用WCF完成了这项工作,如果您希望为您正在获取的数据使用web服务,并且只希望将参数传递到正在进行的方法调用的签名中,我将假设WCF与您正在描述的类似

使用SSR使用web服务时有四件事:

  • 您需要将数据源设置为使用XML(看起来您得到了该部分)
  • 您的web服务必须使用基本HTTP作为其绑定类型
  • 如果您正在使用服务,“连接字符串”必须是服务地址。例如,对于本地托管服务,它将是:

    http: //localhost/Reporting/ReportService.svc
    
    对于部署在我的默认目录下且项目名为“Reporting”的服务和具有ReportService接口的服务。我还将测试您是否可以在VisualStudio中通过搜索并确保它正常工作来访问此服务。或者,如果可以发现,请使用浏览器查找

  • 一旦我有了这个,我需要创建一个“数据集”来正确查询这个服务。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>
    
    
    http://tempuri.org/IReportingService/GetStateLike
    
  • 大部分问题在于消费有多微妙。我得到了它的工作,但认为它是如此脆弱,我不想使用它在我的问题结束。这里还有更多关于它的内容:

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

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

    
    
    <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>
    
    [@参数名] ---同样,在这里传递更多参数 http://tempuri.org/ControllerORInterface/MethodName TransformDataResponse{}/TransformDataResult{}/diffgram{}/NewDataSet{}/yourdatasetname{从服务返回的所有列(逗号分隔)}
    我已经试过了,但运气不好,又一次。。。。。。。。。远程服务器返回错误:(400)请求错误。请求无效。参数字典包含不可为空的类型“System.Int32”的参数“Id”的空条目。对于方法GetReport(Int32)”,可选参数必须是引用类型、可为空的类型,或者声明为可选参数。-------------------------------无法对指定的URL执行web请求。错误请求:远程服务器返回错误:(400)错误请求。我已为我的问题添加了更多注释,请查看。感谢您的帮助。从您的屏幕截图来看,您似乎缺少了“=”和“,”尝试完全按照此处提示使用:=”&参数!Id.ValueI尝试过,但现在我得到了-连接字符串表达式无法在设计时计算。您必须预览或部署报告以验证连接。我得到了相同的结果,然后单击“确定”“保存连接,当我单击“运行”时,它会按预期工作:/谢谢您提供详细的回答,我已经在以前的项目中使用了带有SSRS 2008 R2的WCF服务,但是在这个项目中,我们没有使用wpf,我们有wep api,我在使用它时遇到了问题。这太糟糕了,很抱歉它以不同的方式处理它。我想知道你是否升级到2012年,这是否会有所不同?我知道他们在web服务中做了一些小的更改,但在产品设计器或报告格式上没有做太多更改。也许可以尝试使用高级工具的SQL 2012实验室。对不起,我帮不上忙了。谢谢你的帮助