Wie kann ein .NET-Code wissen, ob er in einer Web-Server-Anwendung ausgeführt wird?

7

Ich habe einen Bibliothekscode, der wissen sollte, ob er im Kontext eines Webservers oder eines eigenständigen Anwendungsservers ausgeführt wird.

Es ist offensichtlich, dass Sie den Namen der Anwendungskonfigurationsdatei überprüfen müssen und ob es web.config ist - dann ist dies ein Webserver, ansonsten - ein eigenständiger Anwendungsserver.

Eine andere Möglichkeit ist, nach etwas wie "Temporäre ASP.NET-Dateien" im Pfad des Schattenordners zu suchen.

Aber ich mag beide nicht, da sie zu hackig und zerbrechlich wirken. Gibt es einen robusten Weg, um das zu tun, was ich will?

Danke.

P.S.

Man kann eine dedizierte App-Konfigurationseinstellung definieren - IsWebServer, aber ich mag es sogar noch mehr.

BEARBEITEN:

Bei der Suche nach einer Lösung für ein anderes Problem, denke ich, habe ich das gelöst - die Details sind hier

    
mark 19.01.2010, 07:41
quelle

7 Antworten

8

Um ein anderes Problem zu lösen, habe ich eine gute Lösung für dieses Problem gefunden. Es gibt eine private Methode System.Configuration.SettingsPropertyValue.IsHostedInAspnet , die genau das tut, was ich brauche. Da ich eine private Methode bin, möchte ich sie nicht nennen (obwohl ich Reflexion verwenden könnte), aber ihre Implementierung ist trivial:

%Vor%

(gemäß Reflektor)

Sieht so aus, als gäbe es einen speziellen Schlüssel in den Daten der App-Domäne - ".appDomain", der beim Ausführen auf dem ASP.NET-Webserver festgelegt wird.

Ich bleibe dabei.

    
mark 19.01.2010, 08:59
quelle
7

Sie können nach

suchen %Vor%

Wenn es nicht null ist, wird es von einer Web-App ausgeführt.

Siehe HttpContext.Current-Eigenschaft

    
rahul 19.01.2010 07:43
quelle
6

Die beste Option ist eine Konfigurationseinstellung.

Es ist besser für die Testbarkeit; es ist besser, weil es eine offensichtliche Aussage darüber ist, wie der Code funktioniert, und es ist besser, weil es nicht auf Implementierungsdetails beruht; Sie verzweigen gezielt von einem Wert, den Sie festgelegt haben. Es kann sein, dass die Entscheidung, die Sie treffen, nicht offensichtlich ist und Ihre Variable / Config die Schlussfolgerung nahelegen kann.

Es ist die Option, die ich wählen würde.

    
Noon Silk 19.01.2010 07:56
quelle
2

Sie können den aktuellen Prozessnamen herausfinden:

%Vor%

und prüfen Sie, ob dies der ASP.NET-Prozessname ist

    
sagie 19.01.2010 07:53
quelle
1
  • BrowserInteropHelper .. ::. IsBrowserHosted    Eigenschaft
  

Ruft einen Wert ab, der angibt, ob   die aktuelle Windows-Präsentation   Foundation (WPF) -Anwendung ist   Browser gehostet.

So ist es in XBAP gemacht

oder wenn Sie eine appdomain haben, tun Sie Reflektion und bekommen Sie etwas davon? Verwenden Sie

abmv 19.01.2010 07:48
quelle
0

Ich denke, das Beste ist, die Bibliothek in zwei DLLs aufzuteilen, eine, die wirklich generisch ist, und eine (die ASP.NET benötigt), die nur auf der Website geladen wird. Überprüfen, ob es derzeit in ASP.NET läuft, fühlt sich an wie ein bisschen wie ein Hack.

Natürlich hängt es von der Situation ab, ob du das leicht machen kannst oder nicht.

    
Sander Rijken 19.01.2010 21:00
quelle
0

Siehe die Antwort, die ich hier zur Verfügung gestellt habe ...

Grundsätzlich können Sie HostingEnvironment verwenden .IsHosted .

    
ghigad 11.03.2015 17:51
quelle

Tags und Links