我解决了它并得到了我想要的东西,在这里发布给其他人可能需要这个解决方案。
当我们添加主机名并绑定applicationHost.config 文件时,该文件位于C:\Windows\System32\inetsrv\config,因此每个站点都会发生一些变化,例如binding、apppool 等,对我来说,我看到了RND1 的绑定是这样的:
<site name="RND1" id="3">
<bindings>
<binding protocol="http" bindingInformation="*:80:RND1" />
<binding protocol="net.pipe" bindingInformation="RND1" />
<binding protocol="net.tcp" bindingInformation="2042:RND1" />
<binding protocol="https" bindingInformation="*:443:RND1" sslFlags="0" />
<binding protocol="net.msmq" bindingInformation="RND1" />
</bindings>
</site>
所以我们可以获取 applicationhost 文件并对其进行操作,但通过一些搜索我找到了 this,它提供了一些有用的信息,可以在运行时获取 IIS 绑定。
我实现了如下代码的少许更改来获取主机名:
private static string GetHostname()
{
// Get the Site name
string siteName = HostingEnvironment.SiteName;
// Get the sites section from the AppPool.config
Microsoft.Web.Administration.ConfigurationSection sitesSection =
Microsoft.Web.Administration.WebConfigurationManager.GetSection(null, null,
"system.applicationHost/sites");
foreach (Microsoft.Web.Administration.ConfigurationElement site in sitesSection.GetCollection())
{
// Find the right Site
if (string.Equals((string)site["name"], siteName, StringComparison.OrdinalIgnoreCase))
{
// For each binding see if they are http based and return the port and protocol
foreach (Microsoft.Web.Administration.ConfigurationElement binding in site.GetCollection("bindings"))
{
var bindingInfo = (string)binding["bindingInformation"];
return bindingInfo.Split(':')[2];
}
}
}
return null;
}
并在application_start 中使用它,例如:
void Application_Start(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(Hostname))
Hostname = GetHostname();
}
希望它对其他人有用。
谢谢。