我有一個Web服務,當它作爲Web引用添加到我的C#項目中時,我想訪問它。 Web服務中的特定方法使用SQL查詢字符串並將查詢結果作爲自定義類型返回。當我添加Web服務引用時,該方法顯示爲返回DataSet[]
而不是自定義類型。這很好,只要我仍然能以某種方式訪問從這些DataSet
對象中的查詢返回的數據。我運行了一個應該返回6行的特定查詢;我回來了一個DataSet[]
陣列與6個元素。但是,當我遍歷這些對象時,它們都沒有任何表格(通過DataSet
上的Tables
屬性)。是什麼賦予了?我的數據在哪裏?從Web服務返回的DataSet對象數組中獲取數據
當我在報表生成器2.0報表中使用它作爲數據源時,該Web服務已經過測試並可以正常工作。我能夠將XML SOAP查詢發送到Web服務並獲取包含我的數據的XML結果。
這裏是我應得的DataSet[]
陣列的樣本:
var service = new MyWebService
{
Credentials = System.Net.CredentialCache.DefaultCredentials
};
DataSet[] dataSets = service.MethodThatReturnsQueryResults(queryString);
// The body of this loop is skipped:
foreach (DataSet ds in dataSets.Where(ds => ds.Tables.Count > 0))
{
// extract data from DataSet ds
}
編輯:這裏有什麼方法看起來像當我加入的是得到了創建的自動生成Reference.cs Web引用:
[return: System.Xml.Serialization.XmlArrayItemAttribute("SomeCustomType")]
public System.Data.DataSet[] MethodThatReturnsQueryResults(
string selectSQLQuery) {
object[] results = this.Invoke("MethodThatReturnsQueryResults",
new object[] { selectSQLQuery});
return ((System.Data.DataSet[])(results[0]));
}
所以它肯定返回System.Data.DataSet[]
,但我不知道有事情發生,使得Web服務,SomeCustomType
使用的自定義類型,是不是在該自動生成的方法中正確翻譯,因此空的DataSet
對象。我很猶豫編輯這個自動生成的方法。我有權訪問Web服務代碼;我應該做些什麼來確保SomeCustomType
可以投到DataSet[]
?
編輯:我覺得如果我剛剛從Web服務中取回原始XML SOAP響應,我可以做得更好。我怎樣才能做到這一點,而不是獲得「翻譯」版本,作爲DataSet[]
?
您是否驗證過他們是Sysytem.Data.Dataset? – 2010-04-12 19:39:49
@亨克:更新了我的問題以顯示Web服務方法的返回類型。 – 2010-04-12 19:45:08
如果您在服務器端發佈WebNethod的(標題),它可能會有所幫助。 – 2010-04-12 19:55:51