2013-08-17 39 views
1

我尝试通过iOS HTTP调用访问Sharepoint 2007 Web服务。通信协议是SOAP(1和1.2)。我能够成功执行GetList和GetListAndView。但是,当我尝试GetListItems时,我得到任何数量的错误消息,其中没有任何意义。Sharepoint 2007 Web服务错误

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;已丢失或无效。”

顺便说一下,我还试图通过Windows盒子上的Fiddler2来调用所有这些SOAP调用。我看到与iOS HTTP调用相同的确切结果。

我已经能够得到最接近的答案是查询格式不正确(杜)。但在我的生活中,正确的格式正在逃避我们。我们已经能够成功地从本地.Net应用程序查询服务器,但是将查询XML的确切内容和格式复制到iOS代码中并不会改变任何内容。

不用说,微软的文档和错误信息是无用的。不,我们不能迁移到MOSS 2010.客户不会很快更新,所以我们必须使用他们已有的技术。

任何帮助都会令人难以置信的赞赏。即使有人能够明确地证明2007年特定的Web服务功能被破坏了。虽然它会吸引人,但至少我们知道我们并不是完全愚蠢的。但是,如果任何人都可以确定我实际上格式化查询错误,并告诉我如何解决这个问题,那将会很棒。

谢谢。

回答

0

我在iOS上使用SOAP查询取得了一些成功。它绝对有一个很好的学习曲线。我应该注意到,我不是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> 

从自定义列表叫笔记,这将给所有条目,其中一个标题==克里斯测试或文件夹==“取消分组”

编辑,我看到你有一个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

我知道这个问题是在一岁,但我的猜测是,你缺少一个

0123所述

<queryOptions></queryOptions> 

节点内

<QueryOptions /> 

元件。希望至少有人帮助:)

相关问题