3

IIS に新しい Web サイトを追加して構成するプログラム「インストーラー」を開発しました。私の問題は、インストールする前に、ユーザーが指定したポートが別のサイトで既に使用されているかどうかを確認したいということです。

私のプロジェクトは C# WinForm スタイルです。アイデアがある人?

string[] lPorts = System.IO.Ports.SerialPort.GetPortNames(); ?
4

3 に答える 3

4

これをチェックして:

BindingInformation プロパティ: 現在のバインディングのバインディング情報を取得または設定します。

このプロパティの値は、バインドの IP アドレス、ポート、およびホスト名を含むコロンで区切られた文字列です。ホスト名は空白のままにすることができます。IP アドレスを「*」に設定して、バインドがすべての変数に対して機能することを示すことができます。

たとえば、ポート 80 のすべての IP アドレスに対して設定され、ホスト名が指定されていないバインディングは、このプロパティから ":80:" を返します。ポート 8080 の IP アドレス 192.168.1.150 に設定されたバインディングは、「192.168.1.150:8080:」を返します。「microsoft.com」という名前のホストのポート 80 ですべての IP アドレスに設定されたバインドは、「 :80:microsoft.com」を返します。

BindingInformation プロパティの値は、ApplicationHost.config ファイルで維持されます。

また、これを確認することもできます:実行時に IIS バインディングを取得する

foreach (Microsoft.Web.Administration.ConfigurationElement binding in mySite.GetCollection("bindings"))
        {
            string protocol = (string)binding["protocol"];
            string bindingInfo = (string)binding["bindingInformation"];

            if (protocol.StartsWith("http", StringComparison.OrdinalIgnoreCase))
            {
                string[] parts = bindingInfo.Split(':');
                if (parts.Length == 3)
                {
                    //Get the port in use HERE !!!
                    string port = parts[1];
                    yield return new KeyValuePair<string, string>(protocol, port);
                }
            }
        }
于 2013-01-07T11:16:18.903 に答える
1

Microsoft.Web.Administration名前空間を調べる必要があり ます

ServerManager.Sitesサイトのリストを取得するために使用する必要があります。各サイトのコレクション バインディングをご覧ください。各サイトには 1 つまたは複数のバインドがあります。つまり、1 つまたは複数のアドレス/ポートを介してアクセスできます。

上記のコードは、usb の前にモデムとプリンターを接続するために使用されていた物理シリアル ポートを探します。

お役に立てれば!

于 2013-01-07T11:06:24.303 に答える