In einem .Net-Webdienst kann festgestellt werden, ob die Assembly in einen Webdienst geladen wurde. Wenn ja, wie würde eine solche Überprüfung erfolgen? Und aus einer solchen Prüfung kann der ursprüngliche Standort der Baugruppe ermittelt werden?Kann festgestellt werden, ob die Baugruppe in einen Webdienst geladen wurde?
Es ist eine lange Geschichte, in der Assemblies zwischen mehreren Eingangspunkten unserer Anwendung auf einem Server geteilt werden, von denen einige über Webdienste zugänglich gemacht werden und andere über traditionellere TCP-Sockets, die in normalen Windows-Diensten gehostet werden. Möglicherweise werden auch andere Windows-Dienste mit denselben freigegebenen Assemblys ausgeführt. Die Konfigurationsanforderungen von jedem sind leicht unterschiedlich und Aufrufe wie System.Windows.Forms.Application.ExecutablePath führen zu unterschiedlichen Ergebnissen, je nachdem, was die Assembly "hostet". Ich muss in der Lage sein, den Standort der Baugruppe zuverlässig zu berechnen, um den Speicherort der Konfigurationsdatei zu berechnen.
Web.config/app.config sind keine Optionen in diesem Szenario.
Es wäre möglich, einen Eintrag in die Registrierung zu setzen, der verwendet werden könnte, um festzustellen, wo sich die Anwendung (en) und alle Baugruppen befinden. Dies wäre jedoch nicht so wünschenswert, als wenn die Anwendung (en) die Standorte selbst berechnen würde.
EDIT:
Lassen Sie uns, dass foo.dll von beiden MyApp.asmx (die Web-Service) und MyService.exe (der Windows-Dienst) aufgerufen werden kann. Gibt es trotzdem festzustellen, ob MyApp.asmx die Anwendung war, die foo.dll aus dem Code-Behind (MyApp.dll) geladen hat?
Dadurch wird die vollständige Liste der Assemblys abgerufen, die primäre Frage wird jedoch nicht behandelt: So ermitteln Sie, ob die Assembly in einem Webdienst ausgeführt wird. –
Wenn Sie "innerhalb eines Webdienstes" sagen, meinen Sie, dass die Überprüfung über den Code in Ihrem Webdienst erfolgt oder wenn Sie außerhalb des Webdienstes sind und diesen Service fragen möchten, wenn er eine bestimmte Assembly geladen hat? –
Aus Code, der im Web-Service ausgeführt wird. Es kann eine zusätzliche Assembly sein, die der Webdienst geladen hat. –