gpt4 book ai didi

c# - 远程 IIS 的路径位置

转载 作者:行者123 更新时间:2023-11-30 15:30:37 26 4
gpt4 key购买 nike

我在使用 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 根文件夹中的网站名称和目录。

我关注了 Microsoft Developer Network,但不幸的是这篇文章并没有很好地概述这个过程。

有谁知道这是否是找到物理路径的正确方法?这篇 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();
}
}

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


更新:

为了论证,我进行了一些额外的测试;我有大约三百个网站。当我运行时:

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";

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

最佳答案

新答案

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

为了演示这一点,我在我的本地 IIS 上设置了一个新站点,并使用与该站点同名的应用程序

IIS Setup

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

Physical Path Original

然后我整理了一个方法来获取目标站点“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();
}
}

运行结果为:

Result

并且物理路径被改变了:

Physical Path Changed

希望这比第一次复习更有帮助。

旧答案

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

关于c# - 远程 IIS 的路径位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21770481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com