2013-08-17 2 views
1

Я пытаюсь получить доступ к веб-сервису Sharepoint 2007, хотя HTTP-вызовы iOS. Протокол связи - SOAP (1 и 1.2). Я могу успешно выполнить GetList и GetListAndView. Однако, когда я пытаюсь GetListItems, я получаю любое количество сообщений об ошибках, ни один из которых не имеет никакого смысла.Ошибки веб-сервиса SharePoint 2007

Формат SOAP вызова (1.2 в этом случае, но та же самая проблема существует для 1.0) для GetListItems заключается в следующем:

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
     <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
      <listName>TaskListSample2-0</listName> 
      <viewName>{13C5392C-7DBC-4803-A3B8-B377D8566A55}</viewName> 
      <query><Query><Where><Or><Eq><FieldRef Name="Title"></FieldRef><Value Type="Text">Test</Value></Eq><IsNotNull><FieldRef Name="Title"></FieldRef></IsNotNull></Or></Where></Query></query> 
      <viewFields><ViewFields><FieldRef Name="Title" /><FieldRef Name="Status" /></ViewFields></viewFields> 
      <rowLimit>100</rowLimit> 
      <queryOptions></queryOptions> 
      <webID>c069106a-8d18-43d6-81c2-2687f568a3c5</webID> 
     </GetListItems> 
    </soap12:Body> 
</soap12:Envelope> 

Структура содержания между <Query>...</Query> точно так же, как и отформатированный в успешном .Net вызове этой функции.

я получаю следующее сообщение об ошибке: назад

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <soap:Fault> 
      <soap:Code> 
       <soap:Value>soap:Receiver</soap:Value> 
      </soap:Code> 
      <soap:Reason> 
       <soap:Text xml:lang="en">Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.</soap:Text> 
      </soap:Reason> 
      <detail> 
       <errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">Root element is missing.</errorstring> 
      </detail> 
     </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

я провел дней на это, наряду с несколькими другими программистами, которые разбираются в .Net и Sharepoint. В зависимости от различных изменений редактирования запроса мы также видели, что «элемент &lt;Query&gt; в запросе отсутствует или недействителен».

Я также, кстати, попытался выполнить все эти SOAP-вызовы через Fiddler2 в окне Windows. Я вижу те же самые точные результаты, что и с вызовами iOS HTTP.

Ближайший ответ, который я смог получить, заключается в том, что запрос отформатирован неправильно (duh). Но для моей жизни правильный формат ускользает от нас. Нам удалось успешно запросить сервер из собственного приложения .Net, но копирование точного содержимого и формата XML запроса в код iOS ничего не меняет.

Излишне говорить, что документация и сообщения об ошибках Microsoft являются уголовно бесполезными. И нет, мы не можем перейти на MOSS 2010. Клиент не будет обновляться в ближайшее время, поэтому нам нужно работать с технологией, которую они имеют.

Любая помощь вообще будет невероятно оценена. Даже если кто-то может окончательно продемонстрировать, что эта функция веб-сервиса нарушена в 2007 году. Хотя это будет сосать, по крайней мере, мы бы знали, что мы не совсем глупы. Но если кто-то может определить, что я на самом деле неправильно форматирую запрос и показываю, как его исправить, это было бы потрясающе.

Спасибо.

ответ

0

У меня был хороший успех, используя запросы SOAP на iOS. У него определенно хорошая кривая обучения. Я должен отметить, что я не специалист по SP, поэтому я не могу объяснить , почему ваш не работает. Это было результатом большого количества поисковых запросов и (askingon SO). Вот исходный XML, когда я делаю GetListItems:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <listName>Notes</listName> 
     <query> 
     <Query> 
     <Where> 
     <Or> 
      <Eq> 
      <FieldRef Name="Title"></FieldRef> 
      <Value Type="Text">Chris Test</Value> 
      </Eq> 
      <Eq> 
      <FieldRef Name="Folder"></FieldRef> 
      <Value Type="Text">Ungrouped</Value> 
      </Eq> 
     </Or> 
     </Where> 
     </Query> 
     </query> 
     <rowLimit>0</rowLimit> 
     <queryOptions> 
     <QueryOptions xmlns:ns2="http://schemas.microsoft.com/sharepoint/soap/" xmlns=""> 
      <IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns> 
      <ViewAttributes Scope="Recursive" /> 
     </QueryOptions> 
     </queryOptions> 
    </GetListItems> 
    </soap:Body> 
</soap:Envelope> 

из пользовательского списка называемых примечаниями, это дало бы все записи, где название == Крис тест или папку == «разгруппирована»

Edit, Я вижу, у вас есть IsNotNull собственность, вот как я делаю, что: (обрезаны для краткости)

<query><Query> 
    <Where> 
    <Or> 
     <IsNotNull> 
     <FieldRef Name="Title"></FieldRef> 
     </IsNotNull> 
     <Eq> 
     <FieldRef Name="Folder"></FieldRef> 
     <Value Type="Text">Ungrouped</Value> 
     </Eq> 
    </Or> 
    </Where> 
</Query></query> 
0

Я знаю, что этот вопрос в течение одного года, но я думаю, что вам не хватает

<QueryOptions /> 

элемент в пределах узла

<queryOptions></queryOptions> 

. Надеюсь, что это поможет хотя бы кому-то :)

 Смежные вопросы

  • Нет связанных вопросов^_^