[英]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上设置了一个新站点,其中一个应用程序使用与站点相同的名称
该站点下的应用程序的物理路径可以在这里看到:
然后,我组建了一个方法来获取目标站点“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.