Sharepoint 2007 Web服务错误

时间:2013-08-17 19:42:37

标签: web-services soap sharepoint-2007

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

GetListItems的SOAP调用格式(在这种情况下为1.2;但1.0存在相同的问题)是:

<?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调用相同。

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

毋庸置疑,Microsoft文档和错误消息在犯罪上毫无用处。不,我们无法迁移到MOSS 2010.客户不会很快更新,所以我们必须使用他们现有的技术。

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

感谢。

2 个答案:

答案 0 :(得分:0)

我在iOS上使用SOAP查询取得了一些成功。它肯定有一个很好的学习曲线。我应该注意到我不是SP专家,所以我不一定能解释为什么你的不行。这是大量谷歌搜索和(asking on SO)的结果。 这是我执行GetListItems时的原始XML:

<?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>

从名为notes的自定义列表中,这将为所有条目提供标题== Chris Test OR文件夹=='Ungrouped'

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

答案 1 :(得分:0)

我知道这个问题超过一年了,但我的猜测是你错过了

<QueryOptions />

中的

元素

<queryOptions></queryOptions>

节点。希望至少能帮助某人:)