2009-02-25 47 views
0

在.Net Web服務中,可以確定程序集是否在Web服務中加載?如果是的話,那麼這樣的支票將如何製作?從這樣的檢查可以確定大會的原始位置?是否有可能確定程序集是否在Web服務中加載?

這是涉及到我們的組件應用程序的多個入口點之間共享一個服務器,有些是通過Web服務暴露和其他人通過正常的Windows服務承載的更傳統的TCP套接字暴露在一個漫長的故事。也可能有其他Windows服務使用相同的共享程序集運行。每個的配置需求都略有不同,並且像System.Windows.Forms.Application.ExecutablePath這樣的調用會根據「託管」程序集產生不同的結果。我需要能夠可靠地計算程序集的位置來計算配置文件的位置。

的Web.config /的app.config不能在這種情況下的選擇。

這將有可能把一個進入可能被用於確定應用程序(S)和所有組件都位於註冊表。但是這不像應用程序自己計算位置那樣理想。

編輯:

讓我們說foo.dll可以從兩個MyApp.asmx(網絡服務)和MyService.exe(Windows服務)被調用。無論如何,要確定MyApp.asmx是否是從代碼隱藏(MyApp.dll)中加載foo.dll的應用程序?

回答

1

這將讓加載到當前執行上下文的所有組件:

Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
+0

這將讓組件的完整列表,但是沒有解決的首要問題:如何確定組件由Web服務中運行。 – 2009-02-25 21:52:49

+0

當你說「來自web服務內部」時,你的意思是檢查發生在你的web服務中執行的代碼中,或者你是web服務的外部,並且想要問服務是否已經加載了給定的程序集? – 2009-02-25 21:56:44

+0

來自在Web服務中執行的代碼。它可能是Web服務已加載的附加程序集。 – 2009-02-25 22:09:11

-1

你可以做一個電話:

Assembly.GetExecutingAssembly().CodeBase 

在你的代碼,這會告訴你當前執行的集會生活。

0

如果您擁有該代碼,最好添加一個初始化方法或某種類型的屬性,通過調用代碼告訴可以使用該程序集運行的程序集。實際上,您可能會添加一個靜態屬性,它是配置文件的位置。

這將幫助你在其他情況下爲好,如測試,您可能需要明確指定配置文件應該被使用,而不是嵌入猜測使用哪個配置文件中的邏輯過程。

0

在研究Web服務的另一個方面,我偶然發現了這一點:

string path = Context.Request.ServerVariables["APPL_PHYSICAL_PATH"]; 

這將返回象是 「C:\的Inetpub \ wwwroot的\ MyWebApp \」,表示應用程序是否安裝。具體路徑取決於應用程序的安裝位置。

正如在問題中提到,這不會直接幫助foo.dll弄清楚它是否是從Web服務被稱爲foo.dll通常不會訪問Context.Request。通過對foo.dll的一些更改,它將允許Web服務告訴foo.dll應用程序根目錄是什麼。

相關問題