Использование GetChanges в веб-сервисе Sharepoint SiteData - PullRequest
3 голосов
/ 20 июня 2011

Я пытаюсь использовать этот код для получения изменений в семействе сайтов. Но я не знаю, как получить databaseId.

            SiteData.SiteData siteData = new SiteData.SiteData();
            siteData.UseDefaultCredentials = true;
            siteData.Url = "http://localhost:333/_vti_bin/sitedata.asmx";
            string lastChangeID = String.Empty;
            string result = siteData.GetContent(SiteData.ObjectType.SiteCollection, "", "", "", false, false, ref lastChangeID);
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(result);
            string startChangeId = string.Empty;
            string endChangeId = doc.ChildNodes[0].ChildNodes[0].Attributes["ChangeId"].Value;
            bool moreChanges;
            string databaseId = "";
            string result2 = siteData.GetChanges(SiteData.ObjectType.SiteCollection, databaseId, ref startChangeId, ref endChangeId, 5, out moreChanges);
            MessageBox.Show(result2); 

Спасибо за ваше время.

Edit:
Это результат GetContent:
enter image description here

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Вы можете снова вызвать метод siteData.GetContent, на этот раз с ContentDatabase как ObjectType.Возвращающий CAML должен содержать ContentDatabaseId.

string s = siteData.GetContent(SiteData.ObjectType.ContentDatabase, "", "", "", false, false, ref lastChangeID);
0 голосов
/ 21 июня 2011

Вам не нужен идентификатор базы данных для вызова метода "GetChanges" в области видимости SiteCollection. Я использую «GetChangesEx», и он работает хорошо, этот метод возвращает аналогичную информацию для «GetChanges». Проверьте спецификацию протокола (PDF), чтобы увидеть различия: Спецификация протокола Site Data . Кроме того, я думаю, что ваша проблема с «SoapServerException» та же, что и у меня здесь:

Этот пример кода относится к другому вопросу, который я упомянул, но я опубликую его здесь для лучшей читаемости:

SiteData.SiteDataSoapClient siteDataService = new SiteData.SiteDataSoapClient();
siteDataService.Endpoint.Address = new System.ServiceModel.EndpointAddress("URL/_vti_bin/sitedata.asmx");
siteDataService.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("username", "password", "domain");
siteDataService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

String xmlInput = "<GetChanges>" + 
                  "<ObjectType>7</ObjectType>" + 
                  "<ContentDatabaseId/>" + 
                  "<StartChangeId>1;1;69b025ce-96a7-4131-adc0-7da1603e8d24;634439727021700000;47404</StartChangeId>" + 
                  "<EndChangeId>1;1;69b025ce-96a7-4131-adc0-7da1603e8d24;634441802456970000;47472</EndChangeId>" + 
                  "<RequestLoad>100</RequestLoad>" + 
                  "<GetMetadata>False</GetMetadata>" + 
                  "<IgnoreSecurityIfInherit>True</IgnoreSecurityIfInherit>" + 
                  "</GetChanges>";
String result = siteDataService.GetChangesEx(1, xmlInput);
...