如何获取 IIS 中托管的任何站点的服务器名称和托管站点名称?

How to get the server name and hosted site name of any site hosted in IIS?

我在 IIS 中托管了一个站点,运行 应用程序。我有一个 exe,它在从 MSMQ 读取条目后执行操作。所以基本上应用程序在 MSMQ 中添加任务,exe 读取该任务并执行它。

我在那个 dll 中也有一个单独的 dll 我正在动态准备 html 的一些 href link。为此,我需要服务器 dns 和托管站点名称。

例如:http://localhost/mysite/login.aspx from this url I need only http://localhost/mysite.

我在 exe 执行的任务之一中使用这个自定义 dll。

现在的问题是我不知道如何获取 dns 和站点名称,因为自定义 dll 没有 HttpContext.Current 对象。

我不确定我是否完全理解您的问题,但是如何将您需要的 URL 保存在服务器的 PATH 中并在您的 DLL 中读取它?

你找那个asp.net函数

GetHostEntry(string hostNameOrAddress)

还有其他包含类似功能的商业库,例如我喜欢的 aspNetDns

使用 GetHostEntryGetHostName 来获取您进行调用的机器的 DNS 主机名。

var hostname = Dns.GetHostEntry(Dns.GetHostName()).HostName;

要获取 IIS 虚拟目录,请按照 OS post How to get the IIS virtual dir & web application's physical paths with C# code:

中说明的说明进行操作
ServerManager serverManager = new ServerManager();

// get the site (e.g. default)
Site site = serverManager.Sites.FirstOrDefault(s => s.Name == "Default Web Site");

// get the application that you are interested in
Application myApp = site.Applications["/Dev1"];

// get the physical path of the virtual directory
Console.WriteLine(myApp.VirtualDirectories[0].PhysicalPath);