SharePoint SoapServerException调用GetListItems Web服务

时间:2009-07-03 12:37:29

标签: web-services sharepoint soap

我的代码中有以下声明:

System.Xml.XmlNode items = lstWebs.GetListItems(
    "Tasks", string.Empty, listQuery, listViewFields,
    string.Empty, listQueryOptions, WorkspaceId);

执行此操作时,会发生以下异常:

Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.

Exception Source is:
System.Web.Services

Stack Trace:
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at ImpersonationConsoleApp.MossLists.Lists.GetListItems(String listName, String viewName, XmlNode query, XmlNode viewFields, String rowLimit, XmlNode queryOptions, String webID) in C:\Documents and Settings\david\My Documents\_Dew02SiteCreator\DeWProjectStarter\ImpersonationConsoleApp\Web References\MossLists\Reference.cs:line 435
   at ImpersonationConsoleApp.Program.DeleteTasksIfNotExist(DataRow[] drTasksdel, String siteURL) in C:\Documents and Settings\david\My Documents\_Dew02SiteCreator\DeWProjectStarter\ImpersonationConsoleApp\Program.cs:line 1384

我已确认网站网址,很好。

请您帮忙解释为什么会发生异常?我需要重置IIS吗?

请查看详细信息。

SoapException.InnerException is Null. 
However the soapExcetion.Detail.InnerText is showing: The system cannot find the file specified. (Exception from HRESULT: 0x80070002) 

3 个答案:

答案 0 :(得分:3)

名称任务是否也是网址中的实际列表名称?即http://siteurl/lists/tasks?是子网站中的列表,您是否在网站集下使用该服务?

如果列表位于子网站中,则使用http://sitecollectionurl/subsite/_vti_bin/lists.asmx作为服务URL,否则lists.asmx将尝试在rootweb而不是子网站中查找任务列表。

答案 1 :(得分:3)

GetListItems的签名是

GetListItems(ListID,"",queryNode,viewFieldsNode,Nothing,queryOptionsNode,Nothing)

尝试将queryNode,viewFieldsNode和queryOptionsNode简化为minimal。

在VB.NET中

Dim caml = New XmlDocument
Dim queryNode = caml.CreateElement("Query") 
Dim viewFieldsNode = caml.CreateElement("ViewFields")
Dim queryOptionsNode = caml.CreateElement("QueryOptions")
queryOptionsNode.InnerXml = "<ViewAttributes Scope=""Recursive"" /><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>"

在C#中

var caml = new XmlDocument();
var queryNode = caml.CreateElement("Query");
var viewFieldsNode = caml.CreateElement("ViewFields");
var queryOptionsNode = caml.CreateElement("QueryOptions");
queryOptionsNode.InnerXml = "<ViewAttributes Scope=\"Recursive\" /><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>";

如果有效,则Web服务设置正确。

当我遇到上述问题时,导致它的是我的无效XML。缺少&#39;类型&#39;关于&#39; Value&#39;的属性&#39; Where&#39;的元素queryNode中的元素。我在Microsoft找到了它。

  

输入|必填文字。指定此元素包含的值的数据类型。

添加Type属性后,它可以正常工作。检查上面提到的其中一个节点中xml是否缺少任何要求?

答案 2 :(得分:-1)

您是否尝试使用提升的权限运行,看起来正在运行的用户没有足够的权限来查询数据...

SPSecurity.RunWithElevatedPrivileges