2012-03-23 84 views
0

我有一些代碼在我的工作者角色和Web角色啓動代碼中使用。在Worker中,代碼從Run()方法調用;在Web角色中,它在Application_Start中被調用。確定Azure Web或Worker角色? (備用:確定是否在IIS中運行?)

我想對其行爲進行細微的更改,具體取決於我是處於工作角色還是Web角色。有沒有辦法檢測到這個?如果沒有,或者我可以檢測到我是否在IIS下運行?

請注意,檢查HttpContext將不起作用,因爲我在Application_Start中運行。

+0

是否有一個原因,你不只是使用Run()方法爲您的網絡和工作人員的情況? Web角色只是一個啓用了IIS的工作者角色;該結構仍將調用Web角色上的所有RoleEntryPoint(Azure角色生命週期)方法。 – 2012-03-24 07:03:13

+0

@ ChrisJ.T.Auld Run()不在完全IIS Web角色的同一AppDomain中運行。 – 2012-03-24 11:18:49

+0

[我能否找到Azure角色類型(worker或web)?](http://stackoverflow.com/questions/8877461/can-i-find-azure-role-type-worker-or-web) – 2012-03-24 19:00:50

回答

1

好,

這個問題有been asked over一遍又一遍。我能想到的是,使用listing all sites in current role instance(ServerManager方法)的方法。如果對ServerManager的調用失敗,或者根本沒有站點,那麼你是一個工作者角色。否則 - 網絡角色。我認爲這是最可靠的檢查方法。

不要忘記,IIS仍然存在於工作角色中(您可以將RDP指定給任何角色,並且會看到IIS服務器角色存在)。它只是沒有開始!所以一個「默認網站」可能仍然存在(從來沒有檢查過這個!)。

+3

「一遍又一遍」,但你鏈接到一個單一的問題,沒有接受的答案..只是冷靜下來,並幫助提問者解決他的問題,不需要是一個混蛋 – artfulhacker 2013-07-06 19:56:21

0

如果「WaWorkerHost」進程存在,則爲工作角色,否則爲網絡角色。您也可以檢查「WaIISHost」

bool isWorkerRole = false; 
    foreach (Process proc in Process.GetProcessesByName("WaWorkerHost")) 
    { 
     isWorkerRole = true; 
    }