2011-10-05 15 views
4

我有一個有時由WebRole服務引用的類庫,有時是由在內部服務器上運行的常規WCF服務引用的。 (這是一個內部的框架類庫包含實用功能)Windows AZURE:類庫:如何知道在Web角色中還是在常規Web服務中運行

該類內部有一種方法來檢測它是否當前在Windows AZURE環境中運行或在IIS中運行?

+1

爲什麼類圖書館需要知道?應該寫成獨立於上下文。 –

+0

當它在本地運行(IIS)時,我需要檢查磁盤上的許可證文件。當它在雲中運行時,我想跳過這一步。 – alexbf

+0

然後這應該是一個配置問題。該代碼應該_told_是否使用許可證檢查。它不應該自行解決這個問題。 –

回答

1

這出現了一些規律性,但老實說,我會保持簡單的事情,並根據配置做出這樣的決定。可以通過在運行時讀取的顯式配置設置,也可以依賴於應用程序配置中定義的容器配置的依賴注入。

在一天結束時,應用程序幾乎肯定會重新打包以發佈到Azure,因此特定於配置的配置不是什麼大問題。

2

我們使用一個靜態類,一對夫婦使用RoleEnvironmentMicrosoft.WindowsAzure.ServiceRuntime特性:

public static bool InAzureEnvironment 
    { 
     get 
     { 
      return RoleEnvironment.IsAvailable; 
     } 
    } 

    public static bool InCloud 
    { 
     get 
     { 
      return InAzureEnvironment && !RoleEnvironment.IsEmulated; 
     } 
    } 

它工作得很好。

0

對於需要與雲環境無關的代碼,使用環境變量可能是個好主意。在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瞭解更多信息。

相關問題