我正在编写一个小型Web应用程序,允许我在网络上的不同服务器上管理多个IIS安装。我们没有域控制器。

我编写了一个使用win32 api及其LogonUser方法的小型模拟控制器。然后,我使用System.DirectoryServices和IIS ADSI提供程序来创建新站点。

我有以下例程(为了更好的可读性,用明文字符串交换了一些值):

            if (impersonationSvc.ImpersonateValidUser("Administrator@SRV6", 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();
        }

当我使用托管Web应用程序的服务器(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

...

任何人都知道如何解决这个问题?

有帮助吗?

解决方案

在这种情况下,您无法使用模拟。您模拟的帐户需要在本地计算机上登录priveleges。

如果您的网络服务器不属于域名,我认为Tant102的网络服务理念是您唯一的选择。

其他提示

我会查看SRV5的事件日志,以检查连接到该服务器时使用的权限。您可能需要在安全日志中更改组策略以记录失败。

在服务器上设置webservices听起来更容易,最好是通过登录和/或ip限制来保护这些操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top