1 Stimmen

Zugriff auf Informationen darüber, wo der WCF-Dienst eingesetzt wird

Ich habe einen WCF-Dienst in mehreren Websites gehostet in IIS7 und manchmal (Entwicklungsumgebung) in VS2010 bereitgestellt.

Oft sind mehrere Instanzen mit derselben Datenbank verbunden und normalerweise ist es kein Problem, da es sich um einen Nur-Lese-Zugriff handelt, aber manchmal (wie bei der Protokollierung) muss ich die Instanz des Dienstes, der auf die DB zugreift, eindeutig identifizieren.

Derzeit tue ich es, indem Sie spezielle Attribut in web.config, die ich später als Teil des Primärschlüssels verwenden, aber ich fühle mich seine nicht ideale Lösung.

Ich dachte an Site-Name, falls es in IIS gehostet wird und Maschinenname + Port, wenn es von VS2010 gehostet wird.

Und jetzt kommt die Frage: Wie kann man auf Informationen darüber zugreifen, wo der WCF-Dienst bereitgestellt wird, und wie kann man es programmatisch aus dem Inneren des bereitgestellten Dienstes in c# tun? Ist das überhaupt möglich?

Ich danke Ihnen für Ihre Vorschläge. Michal

0voto

CodingWithSpike Punkte 41513

Neulich gab es eine Frage, wie man die IP-Adresse des WCF-Servers für die Protokollierung erhält. Dieses Thema könnte helfen: Wie erhält man die IP-Adresse eines WCF-Webdienstes?


Sie können auch feststellen, ob Sie im IIS laufen, indem Sie herausfinden, von welchem Prozess aus Ihre Anwendung ausgeführt wird, indem Sie System.Diagnostics.Process.GetCurrentProcess() und sehen Sie nach, ob es sich um "w3svc.exe" handelt, unter der der IIS-App-Pool läuft.

0 Stimmen

Leider reicht die IP nicht aus, da viele Dienste dieselbe IP verwenden können, oder es könnte eine VM mit mehreren IP-Adressen geben, aber danke für die Idee mit den Prozessen, die nützlich sein werden, um zwischen VS und IIS zu unterscheiden.

0voto

developer Punkte 113

Wenn ich Ihre Frage richtig verstehe, möchten Sie wissen, wo auf dem Server die aktuelle Instanz bereitgestellt wird.

Wenn dies der Fall ist, können Sie etwas verwenden wie:

 (string)AppDomain.CurrentDomain.GetData("APPBASE") 

Oder ich glaube, dass dies auch funktioniert:

  AppDomain.CurrentDomain.BaseDirectory;

Die Verwendung von Reflection auf die Assembly oder den Prozess selbst wird nicht funktionieren, da der laufende Prozess der Host ist (IIS, IISExpress usw.), aber die beiden von mir angegebenen Methoden sollten Ihnen den Ort des Dienstes selbst für gehostete Anwendungen liefern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X