我有一個有時由WebRole服務引用的類庫,有時是由在內部服務器上運行的常規WCF服務引用的。 (這是一個內部的框架類庫包含實用功能)Windows AZURE:類庫:如何知道在Web角色中還是在常規Web服務中運行
該類內部有一種方法來檢測它是否當前在Windows AZURE環境中運行或在IIS中運行?
我有一個有時由WebRole服務引用的類庫,有時是由在內部服務器上運行的常規WCF服務引用的。 (這是一個內部的框架類庫包含實用功能)Windows AZURE:類庫:如何知道在Web角色中還是在常規Web服務中運行
該類內部有一種方法來檢測它是否當前在Windows AZURE環境中運行或在IIS中運行?
這出現了一些規律性,但老實說,我會保持簡單的事情,並根據配置做出這樣的決定。可以通過在運行時讀取的顯式配置設置,也可以依賴於應用程序配置中定義的容器配置的依賴注入。
在一天結束時,應用程序幾乎肯定會重新打包以發佈到Azure,因此特定於配置的配置不是什麼大問題。
我們使用一個靜態類,一對夫婦使用RoleEnvironment
從Microsoft.WindowsAzure.ServiceRuntime
特性:
public static bool InAzureEnvironment
{
get
{
return RoleEnvironment.IsAvailable;
}
}
public static bool InCloud
{
get
{
return InAzureEnvironment && !RoleEnvironment.IsEmulated;
}
}
它工作得很好。
對於需要與雲環境無關的代碼,使用環境變量可能是個好主意。在Windows Azure中運行的服務,你會加入類似:
<Runtime>
<Environment>
<Variable name="INCLOUD" value="true" />
</Environment>
...
此環境變量現在將只顯示在Windows Azure上運行(假設你沒有設置這個地方,不用時當然雲)。您的代碼不需要'知道'有關RoleEnvironment或參考ServiceHosting.dll的任何信息。
如果您需要確定您是在模擬中運行還是使用任何RoleEnvironment設置,那麼也可以在這裏使用新的基於Xpath變量的變量。查詢http://msdn.microsoft.com/en-us/library/windowsazure/hh404006.aspx瞭解更多信息。
爲什麼類圖書館需要知道?應該寫成獨立於上下文。 –
當它在本地運行(IIS)時,我需要檢查磁盤上的許可證文件。當它在雲中運行時,我想跳過這一步。 – alexbf
然後這應該是一個配置問題。該代碼應該_told_是否使用許可證檢查。它不應該自行解決這個問題。 –