2009-03-05 2 views
0

Я занимаюсь написанием небольшого веб-приложения, которое позволит мне управлять несколькими установками IIS на разных серверах в нашей сети. У нас нет контроллера домена.Управление ADSI/IIS и олицетворение ASP.NET

Я написал небольшой контроллер олицетворения, который использует win32 api и его метод LogonUser. Затем я использую System.DirectoryServices и поставщик IIS ADSI для создания нового сайта.

У меня есть следующие рутина (обменялся некоторые значения с четко текстовых строк для лучшей читаемости):

  if (impersonationSvc.ImpersonateValidUser("[email protected]", String.Empty, "PASSWORD)) 
      { 


      string metabasePath = "IIS://" + server.ComputerName + "/W3SVC"; 
      DirectoryEntry w3svc = new DirectoryEntry(metabasePath, "Administrator", "PASSWORD"); 

      string serverBindings = ":80:" + site.HostName; 
      string homeDirectory = server.WWWRootNetworkPath + "\\" + site.FolderName; 


      object[] newsite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory }; 

      object websiteId = (object)w3svc.Invoke("CreateNewSite", newsite); 
      int id = (int)websiteId; 

      impersonationSvc.UndoImpersonation(); 
     } 

Эта подпрограмма работает, когда я использую сервер веб-приложение, размещенного на (SRV6). Создается новый сайт.

Если я использую SRV5, например, другой сервер в нашей сети (без домена), ImpersonateValidUser работает, то DirectoryEntry создается, но w3svc.Invoke терпит неудачу со следующей ошибкой:

[COMException (0x80070005) : Доступ запрещен]

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +377678 
System.DirectoryServices.DirectoryEntry.Bind() +36 
System.DirectoryServices.DirectoryEntry.get_NativeObject() +31 
System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) +53 

...

Любой знает, как я могу решить эту проблему?

ответ

1

Вы не можете использовать олицетворение в этой ситуации. Учетная запись, на которую вы выдаете себя, требует логина входа на локальную машину.

Если ваши веб-серверы не являются частью домена, я думаю, что идея Tant102 о веб-сервисах - это ваш единственный путь.

+0

Вы правы .. слишком много кофе – kitsune

0

Я бы заглянул в журнал событий SRV5, чтобы проверить, какие привилегии используются при подключении к этому серверу. Возможно, вам придется изменить групповые политики на ошибки журнала в журнале безопасности.

Сложно настроить веб-службы на своих серверах, предпочтительно защищенные логинами и/или ip-ограничениями, которые выполняют эти операции.