我有一个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