Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用HttpListener识别主机头使用情况_C#_.net_Sockets_Http_Iis - Fatal编程技术网

C# 如何使用HttpListener识别主机头使用情况

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

我发现一个正在尝试查找主机头的文件正在使用中。所以我用一个url启动一个HTTP侦听器。我预期会出现异常,因为具有主机头的url已注册。代码如下。URL abc:81已经启动并运行,但是侦听器无一例外地启动和停止。有人能帮忙吗

 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地址端口号,它将按预期工作。我的意思是它抛出了已在使用的异常。。但是,不能很好地处理主机头