2012-04-19 4 views
14

Mein C# -Code läuft möglicherweise in einer MVC3-Anwendung unter IIS (derzeit 7,5, möchte aber nicht von einer bestimmten Version abhängen) oder anderswo.Wie kann mein Code finden, wenn er in IIS ausgeführt wird?

Sieht aus wie eine Möglichkeit zu wissen, dass Code unter IIS ausgeführt wird, ist to check the current process name, aber dieser Ansatz hängt davon ab, einen Dateinamen-String hardcoded.

Gibt es eine programmatische Möglichkeit zu erkennen, dass mein Code unter IIS ausgeführt wird und nicht von der IIS-Version abhängig ist?

Antwort

27

Werfen Sie einen Blick auf der HostingEnvironment Klasse, vor allem die IsHosted Methode.

Hier erfahren Sie, ob Sie in einer gehostet werden, die Ihnen mitteilen wird, ob Sie von ASP.NET gehostet werden.

Ausschließlich, es wird Ihnen nicht sagen, dass Sie unter IIS laufen, aber ich denke, dass dies tatsächlich Ihre Bedürfnisse besser erfüllt.

Beispielcode:

// Returns the file-system path for a given path. 
public static string GetMappedPath(string path) 
{ 
    if (HostingEnvironment.IsHosted) 
    { 
     if (!Path.IsPathRooted(path)) 
     { 
      // We are about to call MapPath, so need to ensure that 
      // we do not pass an absolute path. 
      // 
      // We use HostingEnvironment.MapPath, rather than 
      // Server.MapPath, to allow this method to be used 
      // in application startup. Server.MapPath calls 
      // HostingEnvironment.MapPath internally. 
      return HostingEnvironment.MapPath(path); 
     } 
     else { 
      return path; 
     } 
    } 
    else 
    { 
     throw new ApplicationException (
       "I'm not in an ASP.NET hosted environment :-("); 
    } 
} 
-1

Werfen Sie einen Blick auf die ServiceController Klasse. Der Dienstname wird weiterhin fest codiert sein, aber die Chancen, dass der Dienst seinen Namen ändert, sind relativ gering.

Sie auch netstat -ab, um herauszufinden, verwenden könnten, was auf dem Port läuft 80.

+1

Nur weil IIS läuft auf Port 80 nicht seine Anwendung bedeuten wird in IIS gehostet. Das Umgekehrte ist auch wahr - IIS könnte auf jedem anderen Port ausgeführt werden (z. B. 8080) –

+0

True. Aus diesem Grund wird die ServiceController-Klasse empfohlen. – pikzen

+2

Alle ServiceController können Ihnen mitteilen, ob der IIS-Dienst ausgeführt wird und nicht, ob der aktuelle Code in diesem IIS ausgeführt wird. – Mark

Verwandte Themen