ssl이 활성화 된 SharePoint 2010 사이트에서 lists.asmx를 사용하여 ssl을 사용하지 않고 asp.net 웹 응용 프로그램을 사용할 수 있습니다. lists.asmx를 "myref"라는 웹 참조로 추가했습니다.GetListItems "요청이 HTTP 상태 401 : 권한이 없습니다"
내가 사용하는 코드는 다음과 같습니다 :
의 Web.config 내가 위를 사용하는 경우
<system.web>
<identity impersonate="true"/>
<authentication mode="Windows"/>
..........
</system.web>
는 영문 코드
<%@ 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
의. 문제는 하드 코딩 된 사용자 ID가 아닌 asp.net 사이트에 액세스하는 사용자의 로그온 세부 정보를 전달하려고합니다.
asp.net 사이트 서버에 직접 로그온하고 localhost/sitename/pagename.aspx를 통해 직접 액세스하면 내 로컬 컴퓨터의 브라우저에서 작동하지 않는 동일한 코드가 제대로 작동하지만 문제가 발생합니다.
Thread account name: NT AUTHORITY\NETWORK SERVICE Is impersonating: False
의 연결하는 네트워크 서비스를 사용하려고 시도하는 것을 보여주기 위해 보인다 나에게 : 웹 서버의 응용 프로그램 이벤트 로그를 확인
는웹 페이지가 표시되지 않는 다음과 같은 추가 정보를 보여줍니다 서버에 직접 로그온 한 경우를 제외하고는 로그인 된 사용자 세부 정보가 아닌 웹 서비스에 연결됩니다.
- asp.net 응용 프로그램은
- Windows 인증은 SharePoint 웹 서비스에 전달 될 필요가 (익명되지 않음)에 Windows 인증을 가지고
- 로그인 할 때 로컬 시스템을 통해 작동하지 않는 코드는 잘 작동
- web.config 파일에서 가장이 활성화되어 있지만 해제해도 오류가 발생하지 않지만 공유 지점에서 항목을 가져 오지는 않지만
- web.config 파일의 인증 모드 창에 설정 됨
- WindowsIdentity.GetCurrent.name을 출력하고 getlistitems 호출을 비활성화하면 서버 또는 로컬 컴퓨터를 통해 액세스 할 때 내 세부 정보가 분명히 표시됩니다.
왜 이런 일이 발생하는지 알고 싶습니다.