【问题标题】:SSRS 2008 passed xml parameters are being ignoredSSRS 2008 传递的 xml 参数被忽略
【发布时间】:2013-09-25 01:59:09
【问题描述】:

我正在尝试调用 XML 共享数据源的函数并传入参数。

出于问题的目的,我有以下查询,经过清理和简化:

<Query>
    <Method Name="FunctionCall" Namespace="http://tempuri.org/" >

    <Parameters>
        <Parameter Name="BooleanParameter" Type="Boolean">
            <DefaultValue>true</DefaultValue>
        </Parameter> 
    </Parameters>

    </Method>
    <SoapAction>url:my.WebService.FunctionCall</SoapAction>
    <ElementPath IgnoreNamespaces="true"> * </ElementPath>
</Query>

现在,问题是我发送的布尔值没有任何效果。我使用了 Fiddler2 并确认 SSRS 发送的值是真或假,我使用 WCFTestClient 来确定我应该期待什么结果,并且我知道我使用与 Web 服务相同的参数名称这一事实.但是 Web 服务始终默认为 false 参数。我永远无法让它返回一个 BooleanParameter 为 true 的结果。

我一直在这里拉我的头发,欢迎任何信息或怀疑。如有必要,我也可以提供更多信息。我需要做的就是让 web 服务返回一个基于 true 参数的值。

【问题讨论】:

    标签: xml reporting-services parameters


    【解决方案1】:

    这可能有两个原因。

    1) 参数名称不完全匹配。 注意参数名称区分大小写。

    2) 命名空间未正确匹配。请注意,如果您将命名空间指定为 “http://tempuri.org/”确保尾部正斜杠字符存在于您的 Web 服务定义中。 例如。

    [WebService(Namespace = "http://tempuri.org/")]
    public class ReportService : System.Web.Services.WebService
    {
    
    }
    

    【讨论】:

      【解决方案2】:

      我不确定您指的是托管报表、RDL 还是客户端中的报表,例如 RDLC 报表。我相信使用 RDL,您会在 XML 调用中尝试做太多事情。您只需获取数据,然后在报告标记中指定默认值,而不是在调用中。 因此,如果我有一个调用本地 WCF 服务的 XML 查询方法

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

      我没有在此处设置默认值,我只是定义此处将有一个名为“状态”的参数,然后我必须在“报告数据”中有一个具有该值的参数'状态'。然后在那个参数中定义一个默认值。

      请小心,因为我看到 SSRS 将 DateTime 和其他类型误认为是“文本”。这可能是另一个潜在问题,因为您的服务很好,但 SSRS 假设的数据类型不同于传统的布尔值,即使它在服务端是布尔值,接收 xml 调用将其作为文本。您始终可以在客户端 (SSRS) 端使用您的数据类型,看看是否是这种情况。

      【讨论】:

      • 好吧,我试了一下。每次我运行查询时,它都会提示我输入一个变量,我会这样做。似乎仍然没有任何效果。如果这是将我的布尔变量误解为文本的情况,我将如何强制 Web 服务/xml 请求将其视为布尔值?
      • 您是否将 WCF 或其他服务签名中的参数与报告中的参数匹配?在我的方法中,我的服务签名是 (PocoClassObject) GetStateLike(string state)。然后,我为我的参数列出与我的服务接口的 .NET 签名完全相同的名称。要强制布尔值,您只需将其评估为“真”或“假”作为文本,而不是一些是/否。可能将默认设置为“true”。像这样的小事情导致我不将 WCF 与 SSRS 一起使用,我喜欢恕我直言,这太古怪了。
      猜你喜欢
      • 2018-07-30
      • 2015-06-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      相关资源
      最近更新 更多