我有一个SSRS 2005报告,我想使用一个webservice来检索一些数据。该Web服务将接收几个参数。
作为测试,我在当地环境中设置了一个非常简单的演示webservice项目:
[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数据源的数据集,连接字符串中的webservice的(localhost)URL。
在数据集的查询字符串中,我有以下基于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>
我遇到的问题是,尽管webservice被触发,参数没有被传递给webservice,因此返回值总是为0.我已经调试了webservice并在DivideByTwo()方法中放置了一个断点,并且当从报表触发webservice调用并且中断断点时,numberIn值总是为0,而不管我放在Query XML的元素中。
我还尝试在“数据集”对话框的“参数”选项卡中指定“NumberIn”参数(使用提供的值),并从查询XML中删除元素 – 结果是相同的。
我在网站上发现了一些帖子,概述了同样的问题,但似乎找不到解决方案,并且在过去几个小时内一直在撕裂我的头发。任何帮助将不胜感激。
正如DavveK所说,看起来它是一个简单的拼写错误,大小写参数。
您的服务定义正在寻找:
numberIn
而XML DataSet则提供:
NumberIn
作为您提到的文章,参数是区分大小写的。见http://msdn.microsoft.com/en-us/library/aa964129(SQL.90).aspx#8