繁体   English   中英

远程IIS的路径位置

[英]Path Location to Remote IIS

我对Internet信息系统有一个独特的问题。

我有几个托管网站。 每个站点都包含一个应用程序池网站 但是当他们离开他们的付费状态并且过期时。 我设计了一项修改网站物理路径的服务

一个例子:

private static void ExpireSite(string url)
{
     using(ServerManaged manager = new ServerManager())
     {
          Site expire = manager.Sites[url];
          expire.Applications[url].Path = @"C:\inetpub\wwwroot\Expired";
          manager.CommitChanges();
     }
}

它不会修改路径,但我确实设法获得无效路径错误

url参数与根IIS文件夹中的网站名称和目录匹配。

我已经关注了微软开发者网络,但不幸的是,这篇文章没有很好地概述这个过程。

有谁知道这是否是找到物理路径的正确方法? 这篇MSDN文章是否准确?

我想补充一点,记录的方式,不起作用:

private static void ExpireSite(string url)
{
     using(ServerManaged manager = new ServerManager())
     {
          Site expire = manager.Sites[url];
          expire.Applications[url].VirtualDirectories["/"].PhysicalPath = @"C:\inetpub\wwwroot\Expired";
          manager.CommitChanges();
     }
}

我两种方式都收到同样的错误。


更新:

为了争论,我进行了一些额外的测试; 我有大约300个网站。 当我跑:

using(ServerManager manager = new ServerManager())
{
     Site domain = manager.Sites[url];
     foreach(Application app in expire.Applications)
     {
         Console.WriteLine(domain.Id);
         Console.WriteLine(domain.Name); 
         Console.WriteLine(app.Path);
      }
}

它检索他们的数据,但它们都具有相同的路径/ 这似乎不正确; 所以,如果我使用这个:

domain.Applications[@"/"].VirtualDirectories[@"/"].PhysicalPath = @"C:\inetpub\wwwroot\Expired";

它确实改变了路径,但它们是否都包含/ path?

新答案

首先,我仍然坚持没有正确使用Application.Path信息的声明。 路径意味着虚拟路径而不是物理路径。 其次,我认为使用原始代码获取目标应用程序的问题是一个简单的问题。 也就是说,你应该使用的字符串是“/”+ url而不仅仅是url。

为了证明这一点,我在本地IIS上设置了一个新站点,其中一个应用程序使用与站点相同的名称

IIS安装程序

该站点下的应用程序的物理路径可以在这里看到:

物理路径原创

然后,我组建了一个方法来获取目标站点“mylocalsite.hereiam.com”,其下的应用程序具有相同的名称,然后尝试使用应用程序的Path属性以及应用程序的默认虚拟目录更新路径物理路径。

    public static void SetPathTest()
    {
        using (var manager = new ServerManager())
        {
            const string Url = "mylocalsite.hereiam.com";

            var targsite = manager.Sites[Url];

            var targapp = targsite.Applications["/" + Url];
            var worked = false;

            Console.WriteLine("App path: {0}", targapp.Path);

            try
            {
                targapp.Path = @"C:\Projects\Demos\OData\Station.ODataNew";
                Console.WriteLine("Setting Path using Path worked!");
                worked = true;
            }
            catch (Exception)
            {
                Console.WriteLine("Oops. Path isn't settable this way");
            }

            if (!worked)
            {
                try
                {
                    targapp.VirtualDirectories["/"].PhysicalPath = @"C:\Projects\Demos\OData\Station.ODataNew";
                    Console.WriteLine("Setting path using the Virtual directory worked!");
                }
                catch (Exception)
                {
                    Console.WriteLine("Oops. Virtual directory PhysicalPath isn't settable this way");
                }
            }

            manager.CommitChanges();
        }
    }

运行它的结果是:

结果

物理路径发生了变化:

物理路径已更改

希望这比第一次使用更有帮助。

老答案

我认为根据Application.Path文档中的文档,您放入属性的值应该是“/ Expired”而不是“C:\\ inetpub \\ wwwroot \\ Expired”。 如果要使用完整路径,VirtualDirectories属性的PhysicalPath是要设置的正确属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM