Lists.GetListItems
을 CAML 쿼리로 호출하려고합니다. 쿼리 매개 변수를 포함하지 않아도 제대로 작동하지만 쿼리를 포함하면 시간 초과 오류가 발생합니다. 내 웹 서비스가 TestWebService
라고 가정하면, 코드는 다음과 같습니다 GetListItems
중지에 대한 호출은 다음 메시지와 함께 WebException이를 throw 쿼리를 포함하면 GetListItems 시간이 초과됩니다.
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();
}
}
는 "작업은 시간이 초과되었습니다." 나는에
query.InnerXml
할당을 변경하는 경우 :
query.InnerXml="";
는 GetListItems
성공적으로 responseNode
의 값을 반환합니다. 따라서 CAML 쿼리 조각과 관련이 있습니다.
추가 조사에서 GroupBy
요소가 문제의 원인임을 알았습니다. OrderBy
요소가 주석 처리되고 쿼리가 시간 초과되고 GroupBy
요소가 주석 처리 된 경우 쿼리가 성공합니다. GroupBy
가 큰 데이터 세트를 처리 할 수 없거나 너무 느리게 처리하는지 궁금합니다. 이 세트에는 약 20,000 개의 요소가 있으며 일반적으로 각 Title 값의 중복은 5 개 또는 6 개입니다. 이 상황에서 LINQ를 더 적용 할 수 있습니까? 아니면 똑 바른 CAML로 이것을 할 수있는 방법이 있습니까?
목록이 중요한 경우 SP2007에서 호스팅됩니다. 페이지에서 항목을 검색하는 것은 페이지 당 ~ 100 개 항목의 속도로 매우 시간 소모적입니다. 지금은 그룹화하지 않고 전체 목록을 가져온 다음 LINQ를 사용하여 그룹화하고 정렬 해 봅니다. – sigil