2010-08-05 62 views
23

我有一个SSRS 2005报告,我想使用web服务来检索一些数据。这个web服务将会有几个参数。SSRS 2005 - XML webservice数据集 - 参数没有传递给web服务

作为一个测试,我建立了一个非常简单的演示Web服务项目在我的本地环境:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class Service : System.Web.Services.WebService 
{ 
    public Service() {} 

    [WebMethod] 
    public int DivideByTwo(int numberIn) { 
     return numberIn/2; 
    } 
} 

我的测试报告则具有使用XML数据源的数据集,与web服务中(本地主机)网址连接字符串。

在数据集我有以下的查询字符串,基于MS文档(http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx):

<Query> 
    <SoapAction>http://tempuri.org/DivideByTwo</SoapAction> 
    <Method Namespace="http://tempuri.org/" Name="DivideByTwo" /> 
    <Parameters> 
     <Parameter Name="NumberIn"> 
      <DefaultValue>100</DefaultValue> 
     </Parameter> 
    </Parameters> 
    <ElementPath IgnoreNamespaces="True">*</ElementPath> 
</Query> 

我遇到的问题是,尽管Web服务被触发,参数不传递给webservice,因此返回值始终为0.我调试了webservice并在DivideByTwo()方法中放置了一个断点,并且当从报告触发web服务调用并且命中断点时,numberIn值无论我放置在查询XML的元素中,它始终为0。

我也试过在数据集对话框的“参数”选项卡中指定“NumberIn”参数(使用提供的值)并从查询XML中删除元素 - 结果相同。

我在网上发现了一些概述相同问题的帖子,但似乎无法找到解决方案,并且在过去的几个小时里一直在撕掉我的头发。任何帮助将非常感激。

+4

你有一个小的错字。由于参数区分大小写,因此您的查询应该是。我有一个类似的问题,参数没有通过与所有案件正确..所以不知道这是问题,但值得一试。 – DavveK 2011-08-24 14:23:05

+2

谢谢DaweK。我在一段时间前问过这个问题,但我怀疑这是问题,因为问题似乎在一段时间后“消失”,我无法确定我为解决问题所做的工作。 – Michael 2011-10-12 06:46:47

回答

1

正如DavveK所提到的,它看起来像是一个简单的错字,并带有参数的大小写。

服务定义正在寻找:

numberIn 

,而你的XML数据集提供:

NumberIn 

正如你所引用的文章中提到,PARAMATERS是区分大小写的。请参阅http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx的#8

0

这可能是由于两个原因而发生的。

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

2)命名空间没有正确匹配。请注意,如果您将名称空间指定为“http://tempuri.org/请确保在您的webservice定义中存在正斜杠字符。例如。

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

} 

如果未正确指定任何这两个条件,您的Web服务方法会叫尚参数(如DATATIME,INT)都会有默认值。