Ich bin dabei, eine kleine Webanwendung zu schreiben, mit der ich mehrere IIS-Installationen auf verschiedenen Servern in unserem Netzwerk verwalten kann. Wir haben keinen Domänencontroller.ADSI/IIS-Verwaltung und ASP.NET-Identitätswechsel
Ich habe einen kleinen Identitätswechsel-Controller geschrieben, der Win32-API und seine LogonUser-Methode verwendet. Ich verwende dann System.DirectoryServices und den IIS-ADSI-Anbieter, um eine neue Site zu erstellen.
Ich habe die folgende Routine (ausgetauscht einige Werte mit Klartextzeichenfolgen für eine bessere Lesbarkeit):
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();
}
Diese Routine funktioniert, wenn ich den Server der Web-App verwenden, wird auf (SRV6) gehostet. Eine neue Site wird erstellt.
Wenn ich SRV5 zum Beispiel, ein anderer Server in unserem Netzwerk verwenden (ohne Domäne), ImpersonateValidUser arbeitet, wird die Directory erstellt, aber w3svc.Invoke schlägt mit dem folgenden Fehler:
[COMException (0x80070005) : Zugriff verweigert]
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
...
Jeder weiß, wie ich dieses Problem lösen könnte?
Sie haben Recht .. zu viel Kaffee – kitsune