2010-08-05 67 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)都會有默認值。