그래서 나는이 머리에 머리를 치고있다.자체 호스팅 WCF WebServiceHost를 사용하는 가장이 '작업 오류가 발생했습니다.' 오류
var webServiceHost = new WebServiceHost(helloWorld);
webServiceHost.Authorization.ImpersonateCallerForAllOperations = true;
var uri = new Uri(BaseUri + webService.UriDirectory);
var webHttpBinding = new WebHttpBinding(webHttpSecurityMode);
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var sep = webServiceHost.AddServiceEndpoint(IHelloWorld, webHttpBinding, uri);
var webHttpBehavior = new WebHttpBehavior {HelpEnabled = true};
sep.Behaviors.Add(webHttpBehavior);
webServiceHost.Open();
내가 앞서 간 내 방법 다음과 같은 속성 적용한 : 나는 자체 호스팅 WCF 서비스가
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<GpoItem> GetAll()
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
// Execute GPO code here...
return new List<GpoItem>();
}
}
좀 더 컨텍스트를 추가하려면를, 기본적으로 내가 할 수있는 웹 서비스를 웹 페이지에 로그인 한 사용자가 도메인에서 GPO를 만듭니다. 콘솔에서 이것을 실행하면 도메인 사용자로 로그인 한 상태로 실행됩니다. Windows 서비스로 실행하면 "Access Denied"예외가 발생합니다. 따라서 가장 (impersonation)의 필요성. 위의 다음 변경된 코드를 넣으면 '작업 오류가 발생했습니다. (예외 HRESULT : 0x80072020) '. 인터넷 검색 결과 여전히 나에게 권한 문제가 있음을 보여줍니다. 필자는 웹 서비스 테스트 환경에 관리자로 로그인하여 전체 액세스 권한을 갖기 때문에 관리자로서 콘솔에서 실행할 수있는 것으로 나타났습니다. 나는 몇몇 깃발을 놓는 어떤 깃발을 놓치고있는 것처럼 느낀다.
아이디어가 있으십니까?
[Update1] 로컬 시스템에서 네트워크 서비스로 실행되는 서비스 전환 시도했지만 동일한 문제가 계속 발생합니다.
[업데이트 2] 로컬 시스템으로 실행되는 WCF 서비스를 호스팅하는 서버에 로그온하고 해당 컴퓨터에서 직접 브라우저를 사용하면 모든 것이 정상적으로 작동합니다. 그것은 여전히 사용자 인증을 위임하는 문제로 보인다. 아직 알려지지 않았다.
은'WindowsIdentity.Impersonate()'방법은 당신이 당신의'using' 블록에서 참조되지 않은'WindowsImpersonationContext' 값을 반환합니다. 이것을 참조하면 범위를 벗어나면 자동으로 WindowsImpersonationContext.Undo() 메소드가 호출됩니다. – Bernard
WCF 서비스를 추적하여 예외가 throw되는 위치를 확인해 봤습니까? – Bernard
내가 던진 예외는 'System.Runtime.InteropServices.COMException (0x80072020) : 작업 오류가 발생했습니다. (HRESULT 예외 : 0x80072020) ' – ymerej