我正在尝试Lists.GetListItems
使用 CAML 查询进行调用。当我不包含查询参数时它工作正常,但是当我包含查询时出现超时错误。假设我的网络服务被调用TestWebService
,代码是:
public static void GetListItemsTest()
{
try
{
string listName = "TestList";
string[] fields = { "ID", "Title" };
string queryStr =
"<GroupBy collapse='true'>" +
"<FieldRef Name='" + fields[1] + "' />" +
"</GroupBy>" +
"<OrderBy>" +
"<FieldRef Name='ID' Ascending='False' />" +
"</OrderBy>";
XmlDocument xmlDoc = new System.Xml.XmlDocument();
XmlElement query = xmlDoc.CreateElement("Query");
XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
query.InnerXml = queryStr;
viewFields.InnerXml = "";
TestWebService.Lists lists = new TestWebService.Lists();
lists.Url = "http://wss/sites/TestWebService/_vti_bin/lists.asmx";
lists.Credentials = System.Net.CredentialCache.DefaultCredentials;
XmlNode responseNode = lists.GetListItems(listName, null, query, viewFields, "1000000", null, null);
Console.WriteLine("ran successfully");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
Console.ReadLine();
}
}
调用GetListItems
挂起,然后抛出带有消息“操作已超时”的 WebException。如果我将query.InnerXml
作业更改为:
query.InnerXml="";
然后GetListItems
成功返回responseNode
. 所以它必须与 CAML 查询片段有关。
经过进一步调查,我发现该GroupBy
元素是问题的根源;OrderBy
注释掉元素,查询超时,注释掉GroupBy
元素,查询成功。我想知道是否GroupBy
无法处理大型数据集,或者处理速度太慢;这个集合大约有 20,000 个元素,每个 Title 值的重复项一般不超过 5 或 6 个。LINQ 会更适用于这种情况吗?或者有没有办法用直接的 CAML 来做到这一点?