2013-05-01 61 views
4

我有一個C#MVC4應用程序,我最近遷移到了Azure Web角色。我可以在Azure平臺上很好地發佈/運行該站點,但是當我嘗試使用Azure開發結構在本地運行它時,IIS和IIS Express會拋出一個通用的403錯誤。IIS和IIS Express在本地爲MVC4引發403錯誤Azure應用程序

我嘗試添加以下內容到我的web.config中,因爲我已經看到它在衆多帖子中提到過,但它沒有幫助。無論如何,這個解決方案似乎有點像大錘的方法,因爲它通過託管管道運行所有請求,但仍然認爲我會給它一個鏡頭。

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"></modules> 
    <handlers> 
     <remove name="UrlRoutingHandler"/> 
    </handlers> 
    </system.webServer> 

我已驗證我可以訪問的「robots.txt」文件在我的應用程序根目錄,這樣服務器被解僱了,並指向正確的地方,但它不會成爲我的任何MVC頁。

我也試過this SO answer的解決方案。那裏也沒有骰子。

我也嘗試將我的Azure Web角色切換到IIS而不是IIS Express運行。我在那裏得到相同的403錯誤。爲了徹底,我運行了aspnet_regiis -ir,即使在我的機器上本地運行的其他MVC應用程序(非Azure)也能正常工作。

編輯 所以這是有趣的...當我按F5鍵(我的Azure項目是我的啓動項目),在Azure計算/存儲仿真器火了起來,然後我的瀏覽器打開http://127.0.0.1:81/。這是我在403錯誤處得到的URL。但是,如果我使用的是IIS(不是Express),並且我在Azure在部署過程中創建的IIS中的網站上右鍵單擊「管理網站」,然後選擇「瀏覽」,它會打開該網站在http://localhost:82/。注意「localhost」而不是127.0.0.1和端口82而不是81和它工作!我可以通過我的網站瀏覽沒有問題,打斷點等現在,如果我嘗試http://127.0.0.1:82(使用IP,但港口82),我仍然得到403.

任何想法?

+0

我記得在VS網站夫婦問題:a)檢查防火牆和防病毒軟件不會阻止某些端口(只是嘗試禁用它們)b )在項目設置中轉到Web設置,關閉動態端口並檢查固定端口(並設置82)。 – outcoldman 2013-05-10 04:21:38

+0

Azure不使用標準VS MVC項目中的Web設置。它將計算實例加載到Azure開發結構中,以便MVC項目的Web設置不會產生任何影響。我沒有問題到端口81/82,我只是得到403錯誤,一旦他們加載。 – Scott 2013-05-10 04:36:55

+0

有沒有機會在您的本地iis上運行81端口的任何網站? – JamesKn 2013-05-10 07:49:15

回答

1

我無法得到確切的問題,但我可以嘗試解釋您的網站爲什麼會這樣做(我們的項目中的行爲非常類似)。我不確定這是對此行爲100%正確的解釋,但我ha AFAIK: 1.您的IIS和IIS Express不能同時使用相同的端口。 2.運行它自己的堆棧的Azure計算仿真器\負載均衡代理(模擬多實例天青環境)並需要在某個端口註冊自己。

爲什麼發生這種情況: 您可能在您的IIS中有一些使用端口80的其他站點。因此,當Emulator啓動時 - 它會發現端口80無法使用(導致它被您的工作iis鎖定)。它開始走碼頭,直到它找到下一個自由端口綁定(對我們來說它將是81和444)。你可以開始F5後檢查一般輸出窗口,你可以在那裏找到類似的消息:

Windows Azure Tools: Warning: Remapping public port 80 to 81 to avoid conflict during emulation. 
Windows Azure Tools: Warning: Remapping public port 443 to 444 to avoid conflict during emulation. 
Windows Azure Tools: Warning: Remapping private port 80 to 82 in role 'MvcApplication' to avoid conflict during emulation. 
Windows Azure Tools: Warning: Remapping private port 443 to 446 in role 'MvcApplication' to avoid conflict during emulation. 

所以仿真器註冊的公共端口81上他的負載平衡端點\ 444和暴露的某種內在的端點上82 \ 446。 但我懷疑'127.0.0.1'和'localhost'的行爲有點不同(我知道它是一樣的東西,只是懷疑IP網址會通過一個不同的管道,但我無法證實我的猜測)和,特別是如果你在一個角色中有多個站點 - 127.0.0。1將無法擊中正確的端點(可能導致它不包含正確的主機頭?)。

這導致localhost:444(在我們的例子中)正常工作而127.0.0.1:444不工作的情況。

This answer also could lead you to some options how to fix\deal with that.

希望它會幫助你有點

相關問題