我尝试通过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精通一起。根据对查询的各种编辑更改,我们还看到“查询中的元素<Query>
已丢失或无效。”
顺便说一下,我还试图通过Windows盒子上的Fiddler2来调用所有这些SOAP调用。我看到与iOS HTTP调用相同的确切结果。
我已经能够得到最接近的答案是查询格式不正确(杜)。但在我的生活中,正确的格式正在逃避我们。我们已经能够成功地从本地.Net应用程序查询服务器,但是将查询XML的确切内容和格式复制到iOS代码中并不会改变任何内容。
不用说,微软的文档和错误信息是无用的。不,我们不能迁移到MOSS 2010.客户不会很快更新,所以我们必须使用他们已有的技术。
任何帮助都会令人难以置信的赞赏。即使有人能够明确地证明2007年特定的Web服务功能被破坏了。虽然它会吸引人,但至少我们知道我们并不是完全愚蠢的。但是,如果任何人都可以确定我实际上格式化查询错误,并告诉我如何解决这个问题,那将会很棒。
谢谢。