2008-10-18 7 views
5

Ich habe zwei Windows-Dienste auf dem gleichen Computer ausgeführt. Beide Dienste verwendenStarten mehrerer HTTP-Listener auf IIS mit C# .NET 2.0

private HttpListener Listener;

Ich spezifiziere die baseURL als "http://IPAddress:8080/" & "http://IPAddress:8081/" jeweils für jeden der Dienste. Dann mache ich das Notwendige und rufe

listener.Start();

Der erste Dienst startet erfolgreich am 8080-Port. Aber wenn ich jetzt den 2. Dienst starte, bekomme ich HTTPListenerException "Der Prozess kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird" für Listener-Objekt.

Konnte mir bitte jemand sagen: 1) Wenn es möglich ist, zwei HTTP-Listener auf dem gleichen IIS an zwei verschiedenen Ports zu starten. 2) Wenn ja, wie können wir das erreichen? 3) Gibt es eine andere Möglichkeit, dies zu tun?

Zu Ihrer Information: Ich benutze C# .NET 2.0 und IIS 6.0 Server.

Dank & Grüße,

Hari

Antwort

4

Hat Httplistener nicht unabhängig von IIS arbeiten? Können Sie den IIS-Dienst anhalten und sehen, was passiert?

Oder vielleicht Port 8081 ist von einem anderen Programm oder Prozess verwendet. Ich schlage vor, den Port auf eine andere Nummer zu setzen. Sie könnten eine Befehlszeile öffnen und den Befehl "netstat" ausführen, um zu sehen, wenn der Port verwendet wird, bevor Sie Ihre Dienste starten.

alt text http://simpleinformation213421.googlepages.com/netstat_ano.gif

1

Der Httplistener ist in der Tat nicht ein Teil des IIS. Es ist nur C# -Code.

hast du es so gemacht?

String[] prefixes = { "http://localhost:8280/", "http://localhost:8281/"}; 

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add("http://localhost:8280/"); 
listener.Start(); 

1) Wenn es möglich ist, an zwei verschiedenen Ports zwei HTTP-Listener auf dem gleichen IIS zu starten.

Ja, ist es. Aber die Listener auf dem IIS werden nicht über den Code erstellt, sondern über das IIS-Verwaltungstool. Das ist also wahrscheinlich nicht das, was Sie versuchen. IIS ist getrennt von dem C# -Code, den Sie ansteuern.

2) Wenn ja, wie können wir dies erreichen?

  • Versuchen Sie, einige andere Portnummern (wie 58080 und 58081) und versuchen Sie "IPAddress" mit "localhost" zu ersetzen. Wahrscheinlich Ihre Portnummer wird von einem anderen Webserver verwendet

3) Gibt es eine andere Art und Weise, dies zu tun?

Wenn Sie versuchen, Webseiten zu dienen, haben Sie wahrscheinlich eine Webapplikation machen wan't stattdessen Ihre eigenen HTTP-Server machen

Wenn Sie etwas Gewohnheit zu tun, möchten Sie vielleicht einen Blick nehmen bei WCF (Windows Communication Foundation), wie es ist der neue Rahmen für Web, Steckdosen, einen Web Service usw. und es ist das, was MS wird

2

Vielen Dank für Ihre sofortige Antwort für die Zukunft verwenden die :-)

Portnummer war Problem. Ich habe Portnummern wie 8080,8081,8082 usw. verwendet. Wahrscheinlich wurden diese Ports bereits benutzt.

Ich versuchte mit den Ports http://localhost:8080 und http://localhost/35124 und es funktionierte.

noch einmal vielen Dank für Ihre Antworten.

Dank & Grüße,

Hari

1

Es ist in der Regel eine gute Idee, einen kurzen Blick auf this Seite zu nehmen, wenn Portnummern mit ... nur sicher einer temporären Nummer Sie versuchen zu verwenden, um wird nicht schon benutzt.