SP 객체 모델에 액세스하는 웹 파트가 있으며 GAC에 서명되어 배포 된 어셈블리에 패키지되어 있습니다. web.config는 "전체"신뢰로 설정되어 있지만 웹 부분은 SecurityException
입니다. 코드의 잘못된 라인 :신뢰가 전체로 설정되었지만 웹 파트가 여전히 SecurityException을 발생시킵니다.
SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(() =>
{
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
}));
이 RunWithElevatedPrivileges
가 (즉, 내 대리인이 전혀 실행하지 않습니다)를 호출 할 때 예외가 발생 나타납니다. 어떤 아이디어? 나는이 시점에서 완전히 당혹 스럽다.
갱신는 :
public MyWebPart()
{
context = new MyProject.Data.MyDataContext(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString);
SPUser user = SPContext.Current.Web.CurrentUser;
identity = String.Format("'{0}'", user.LoginName.ToLowerInvariant().Replace(@"\", @"\\"));
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
identity = '[' + identity + ']';
}
그리고 예외 : 여기에 코드를 내가 RunWithElevatedPrivileges 방법에 싸서 전에 어떻게 생겼는지의 예외 도우미가 제공하는 하이라이트를 바탕으로
System.Security.SecurityException occurred
Message="Request failed."
Source="Microsoft.SharePoint"
StackTrace:
at Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator()
at MyProject.MyWebPart..ctor()
InnerException:
, SPUser.Groups 속성의 시도 된 액세스가 문제 인 것처럼 보입니다. user.Groups
.
내가 정말로 혼란스러워하는 이유는이 정확한 코드가 이틀 전에 훌륭하게 작동한다는 것입니다. 그러나 팜에 다른 문제가 있었으며 기본적으로 다시 작성해야했습니다. 다른 모든 것들을 다시 백업 한 후에 나는이 웹 파트를 페이지에 추가하려고 시도했고이 문제는 그 자체를 나타냈다. RunWithElevatedPrivileges
래퍼에있는 코드를 래핑하여 시도해 보았습니다. 문제가되는 비트를 정확히 분리 할 수 있는지 알아 보았습니다.하지만 SP 객체 모델을 만지는 것은 마치 RunWithElevatedPrivileges
메서드를 포함하여 예외를 발생시키는 것처럼 보입니다.
업데이트 2 : 아직도 실패한 진짜 이유는 모르지만 웹 파트를 추가하려고 할 때 발생했습니다. 디버거에서 중단 점을 설정 한 후, 나는 생성자가 두 번 호출된다는 것을 깨달았습니다. 처음에는 모두 예상대로 정확하게 작동했지만 두 번째는 예외가 발생했을 때였습니다. 나는 아직도 이유를 모른다. 이 문제를 해결하기 위해 두 가지 방법을 찾았습니다. 생성자에서 문제가되는 코드를 웹 파트의 라이프 사이클 이후 지점으로 이동하거나 웹 파트를 추가하기위한 코드를 주석 처리 한 다음 주석 처리를 제거하고 재배포합니다.
"3 일 전에 일했다"는 이유는 오랜 시간 전에 웹 파트를 페이지에 추가 한 다음 위 코드를 생성자에 추가했기 때문입니다. 웹 파트가 이미 추가되었으므로 어떤 문제도 보지 못했습니다. 나중에 사이트를 다시 빌드하고 페이지에 웹 파트를 다시 추가해야 할 때이 문제가 나타납니다. 그래서 기술적으로, 이전에 "작동하지"않았고, 오작동을 일으키지 않았습니다.
어쨌든, 내가 말했듯이 - 여전히 예외의 진정한 원인을 알지 못하므로 그 라인에 대한 답변은 여전히 환영 받고 있습니다.
웹 파트의 생성자에서 코드를 이동하면 비슷한 문제가 발생합니다. 질문을 업데이트 해 주셔서 감사합니다. –
누구나 왜이 컨스트럭터를 움직여야하는지 알 수 있습니까? – xdhmoore