我在启用了ssl的sharepoint 2010网站上使用lists.asmx启用了没有启用ssl的asp.net Web应用程序。我已将lists.asmx添加为名为“myref”的Web引用。
我正在使用的代码如下:
Web.config片段
<system.web>
<identity impersonate="true"/>
<authentication mode="Windows"/>
..........
</system.web>
aspx代码
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.xml" %>
<%@ Import Namespace="myref" %>
<%
Dim xmlDoc As XmlDocument = New System.Xml.XmlDocument()
Dim myQuery As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Query","")
myQuery.InnerXml = "<Where><Eq><FieldRef Name='_ModerationStatus' /><Value Type='ModStat'>2</Value></Eq></Where>"
Dim myViewFields As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields","")
myViewFields.InnerXml ="<FieldRef Name='_Status' /><FieldRef Name='owshiddenversion' />"
Dim myQueryOptions as XmlNode= xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions","")
myQueryOptions.InnerXml = "<Folder>my list</Folder>"
Dim mylist As new myref.Lists()
mylist.UseDefaultCredentials = true
mylist.PreAuthenticate = True
Dim ndLists As XmlNode = mylist.GetListItems("my list","",myQuery,myViewFields,100,myQueryOptions,"")
Response.Write(ndLists.outerxml)
%>
如果我使用上述内容,我会收到错误:
Line 514: [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://schemas.microsoft.com/sharepoint/soap/GetListItems", RequestNamespace="http://schemas.microsoft.com/sharepoint/soap/", ResponseNamespace="http://schemas.microsoft.com/sharepoint/soap/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
Line 515: public System.Xml.XmlNode GetListItems(string listName, string viewName, System.Xml.XmlNode query, System.Xml.XmlNode viewFields, string rowLimit, System.Xml.XmlNode queryOptions, string webID) {
Line 516: object[] results = this.Invoke("GetListItems", new object[] {
Line 517: listName,
Line 518: viewName,
如果我使用:
Dim cache As CredentialCache = New CredentialCache()
cache.Add(New Uri(mylist.Url), "Negotiate", New NetworkCredential("userid", "password", "domain"))
而不是
mylist.UseDefaultCredentials = true
它工作正常。 问题是我想通过访问asp.net站点的用户登录的详细信息,而不是硬编码的用户ID。
如果我在本地计算机上的浏览器上无效的相同代码可以正常工作,如果我直接登录到asp.net站点服务器并通过localhost / sitename / pagename.aspx直接访问,那么复杂化。
检查Web服务器上的应用程序事件日志会显示以下网页未显示的额外信息:
Thread account name: NT AUTHORITY\NETWORK SERVICE Is impersonating: False
对我来说似乎表明它试图使用网络服务连接到Web服务而不是登录用户详细信息,除非您直接登录到服务器。
知道为什么会这样吗?
答案 0 :(得分:1)
这是由kerberos代表团解决的。在 DELEGATION 标签下的Active Directory中,选择了信任此计算机以便委派任何服务(仅限Kerberos)选项。
之后花了几个小时才实际开始工作(我认为它应该在30秒左右但由于某种原因需要更长的时间)。