C# 如何使用HttpListener识别主机头使用情况
我发现一个正在尝试查找主机头的文件正在使用中。所以我用一个url启动一个HTTP侦听器。我预期会出现异常,因为具有主机头的url已注册。代码如下。URL abc:81已经启动并运行,但是侦听器无一例外地启动和停止。有人能帮忙吗C# 如何使用HttpListener识别主机头使用情况,c#,.net,sockets,http,iis,C#,.net,Sockets,Http,Iis,我发现一个正在尝试查找主机头的文件正在使用中。所以我用一个url启动一个HTTP侦听器。我预期会出现异常,因为具有主机头的url已注册。代码如下。URL abc:81已经启动并运行,但是侦听器无一例外地启动和停止。有人能帮忙吗 bool notUnderUse; HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://abc:81/") ; try { listener
bool notUnderUse;
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://abc:81/") ;
try
{
listener.Start();
listener.Stop();
notUnderUse = true;
}
catch (Exception ex)
{
notUnderUse = false;
}
我用各种引用对下面的函数进行了编码,它工作得很好
public static bool IsHostHeaderUnderUse(string ipAddress,string port, string hostname)
{
bool alreadyUnderUse = false;
var header = string.Format("{0}:{1}:{2}", ipAddress, port, hostname);
int? iisVersion = IISUtility.GetIISVersion();
if (iisVersion.HasValue && iisVersion < 7)
{
DirectoryEntry iis = new DirectoryEntry("IIS://localhost/W3SVC");
foreach (DirectoryEntry directoryEntry in iis.Children)
{
var bindings = directoryEntry.Properties["ServerBindings"];
if (bindings.Contains(header))
{
alreadyUnderUse = true;
break;
}
}
}
else
{
var serverManager = new ServerManager();
foreach (Site site in serverManager.Sites)
{
foreach (var binding in site.Bindings)
{
if (binding.BindingInformation.Contains(header))
{
alreadyUnderUse = true;
break;
}
}
if (alreadyUnderUse) { break; }
}
}
return alreadyUnderUse;
}
public static bool IsHostHeaderUnderUse(字符串IP地址、字符串端口、字符串主机名)
{
bool alreadyUnderUse=false;
var header=string.Format(“{0}:{1}:{2}”,IP地址、端口、主机名);
int?iisVersion=IISUtility.GetIISVersion();
if(iisVersion.HasValue&&iisVersion<7)
{
DirectoryEntry iis=新的DirectoryEntry(“iis://localhost/W3SVC”);
foreach(iis.Children中的DirectoryEntry DirectoryEntry)
{
var bindings=directoryEntry.Properties[“ServerBindings”];
if(bindings.Contains(header))
{
alreadyUnderUse=true;
打破
}
}
}
其他的
{
var serverManager=newservermanager();
foreach(serverManager.Sites中的站点)
{
foreach(site.Bindings中的var绑定)
{
if(binding.BindingInformation.Contains(头))
{
alreadyUnderUse=true;
打破
}
}
if(alreadyUnderUse){break;}
}
}
返回已删除的文件;
}
如果我提供IP地址端口号,它将按预期工作。我的意思是它抛出了已在使用的异常。。但是,不能很好地处理主机头