2012-07-13 3 views
3

다음 방법이 주어지면 IIS 7 응용 프로그램 풀을 시작/중지하려고합니다. 서비스를 중지 할 때 나는 성공적으로 내 로컬 시스템에서이 작업을 수행 할 수 있지만, 나는 우리의 윈도우 2008 서버에서이를 넣을 때, 난 단지 오류가 - 시작은 잘 작동 다음과 같이C#으로 DirectoryEntry를 사용하여 IIS 응용 프로그램 풀을 시작/중지하는 데 필요한 액세스 권한은 무엇입니까?

[NoCache] 
public ActionResult EnableAppPool(Models.ActionRequest actionRequest) 
{ 
    try 
    { 
     if (ModelState.IsValid && actionRequest.ActionRequestPassword == ConfigurationManager.AppSettings["NewsfeedAdminPassword"]) 
     { 
      bool enableNewsfeed = false; 
      enableNewsfeed = Convert.ToBoolean(actionRequest.EnableNewsfeedAppPool); 

      string sPath = "IIS://" + ConfigurationManager.AppSettings["MachineName"] + "/W3SVC/AppPools/" + ConfigurationManager.AppSettings["AppPoolName"]; 
      Console.WriteLine(sPath); 
      DirectoryEntry w3svc = new DirectoryEntry(sPath); 
      if (enableNewsfeed) 
      { 
       w3svc.Invoke("Start"); 
      } 
      else 
      { 
       w3svc.Invoke("Stop"); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    return null; 
} 

오류는 다음과 같습니다

액세스가 거부되었습니다. HRESULT에서 예외 : 0x80070005 (E_ACCESSDENIED) 설명 : 현재 웹 요청 실행 중에 처리되지 않은 예외가 발생했습니다. 오류 및 코드가 에서 발생한 지점에 대한 자세한 내용은 스택 추적을 검토하십시오.

예외 정보 : System.UnauthorizedAccessException : 액세스가 거부되었습니다. (HRESULT 예외 : 0x80070005 (E_ACCESSDENIED))

ASP.NET에서 요청한 리소스에 액세스 할 수있는 권한이 없습니다. ASP.NET 요청에 대한 리소스에 대한 액세스 권한을 부여하는 을 고려하십시오. ASP.NET은 응용 프로그램이 가장하지 않는 경우 사용되는 기본 프로세스 ID (IIS5의 경우 {MACHINE} \ ASPNET 또는 IIS 6 및 IIS 7의 경우 네트워크 서비스이고 IIS7의 경우 구성된 응용 프로그램 풀 ID는 ) . 응용 프로그램이 으로 위장하면 익명 사용자 (일반적으로 IUSR_MACHINENAME) 또는 인증 된 요청 사용자가됩니다.

나는 이것이 사용 권한 문제라는 것을 알고 있지만 액세스 권한을 부여 할 대상과 사용자에 대해 확신하지 못합니다.

참고 : 이미 IIS 6 메타베이스 및 WMI 호환성

+1

는 필요한 권한은 응용 프로그램 풀 ID 사용자에게 부여해야합니다.응용 프로그램이 실행중인 응용 프로그램 풀 ID를 확인하고 해당 사용자에 대한 액세스 권한을 부여하십시오. – Tariqulazam

답변

1

하면 코드가 시작하고 응용 프로그램 풀을 중지 할 수있는 권한이없는 실행되고있는 신원 수 있었다. 여기에 기사의 견적이 있습니다

"Active Directory와 통신하려면 네트워크 보안, 비즈니스 규칙 및 기술적 제약을 고려해야합니다 .ASP.NET 페이지의 Active Directory 코드를 사용하는 경우 코드에 디렉토리에 대한 액세스 및 상호 작용을위한 적절한 수준의 권한이 있는지 확인해야합니다. 개발 목적이나 개념 증명을 위해 ASP.NET 수준 (web.config) 및 IIS 수준에서 가장을 사용하고 IIS 서버와 디렉터리 도메인 컨트롤러가 동일한 컴퓨터에 상주하지만 동일한 엔터티가 동일한 서버에 있지 않은 경우 (실제 프로덕션 환경에 있지 않은 경우) 코드를 가장과 같은 클래스로 래핑 할 수 있습니다 (예 : 가장 된 사용자의 토큰에서 디렉터리 호출을 실행할 Zeta Impersonator입니다. "

http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#3

는 그리고이 문서는 명확 DIFF에서 당신이 응용 프로그램 코드의 비트를 실행 컨텍스트 (높은 수준의 ACESS 사용자를 posibliy)하는 방법을 expains. 관리자로 사칭하지 않는

http://support.microsoft.com/kb/306158