Ich muss einen tcp-Port der angegebenen Website auf IIS 7 und IIS 6 mit C# erhalten. Ich habe eine Konsolenanwendung, die den Namen der Website kennt. Sie sollte einen Port finden, an dem diese Website bedient wird.
Antworten
Zu viele Anzeigen?NUN GUT. Ich werde Ihnen eine andere Antwort geben, da Sie bemerkt haben, dass meine letzte Antwort nicht die Antwort auf Ihre Frage war.
Versuchen Sie, eine global.asax
Datei zu Ihrer asp.net-Anwendung hinzufügen. Sie enthält Funktionen zur Behandlung verschiedener Ereignisse auf dem Server. Für die Application_Start
Funktion können Sie einen Code einfügen, der die Nummer des Ports, über den die Website läuft, in einer Datei oder Datenbank speichert.
Dann kann die Konsolenanwendung auf dieselbe Datei oder Datenbank zugreifen, um die Portnummer zu ermitteln.
Wenn Ihnen das nicht zusagt, wäre vielleicht eine bessere Frage an SO: "Wie kann ich die IIS-Einstellungen für eine Website zur Laufzeit programmatisch auslesen?"
Standardmäßig bindet sich IIS an Port 80 (Standard-HTTP-Port), aber ich bin sicher, die Antwort ist nicht so einfach.
Vielleicht hätten Sie die Admin-Skripte in IIS 6.0 verwenden können, um die IIS-Objekte zu durchsuchen und die Anschlussnummer zu finden, aber das setzt voraus, dass das Skript physisch auf dem Server läuft.
Die einzige andere Möglichkeit ist, jeden 65535-Port zu scannen, um zu sehen, ob es einen html-Listener gibt, vielleicht mit wget.
FÜR IIS 7 ;-)
private bool checkPortIsOpen(string portNumer)
{
ServerManager serverMgr = new ServerManager();
int index = 0;
bool isOpen = true;
foreach (Site mySite in serverMgr.Sites)
{
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)
{
string port = parts[1];
if(port.Equals(portNumer.ToString()))
{
isOpen = false;
webSite_portInUse = mySite.Name;
}
}
}
index++;
}
}
return isOpen;
}
- See previous answers
- Weitere Antworten anzeigen