2016-10-13 47 views
1

我有一個.NET的WebAPI應用在我的開發機器的IIS在本地工作,但如果我在服務器上部署它,在那裏我得到的錯誤致命的通信錯誤的Windows進程激活服務

HTTP錯誤503該服務不可用。

每當我嘗試訪問該API。就在這時,該應用程序池停止(是的,它已經正確,正確,直到我做了一個API調用運行),我得到在事件查看器中的錯誤:

服務應用程序池的處理「MyNewTestAppPool」遭遇與Windows進程激活服務致命的通信錯誤。

我所說的控制器是一個非常複雜的一個:

public class ExampleController : ApiController 
{ 
    [HttpGet] 
    public bool GetTrue() 
    { 
     return true; 
    } 
} 

所以這不能與因我的代碼中無限循環的堆棧溢出的問題。我擔心這是認證和授權鏈中的一個無限循環。

在同一臺服務器上正確部署的另一個應用程序的主要變化是,此應用程序應該使大多數控制器都要求使用本地AD進行身份驗證,而單個控制器不會 - 而其他應用程序要麼始終需要身份驗證,要麼決不。

爲了實現這種混合模式,我做了以下內容:

  • 在Web.config中,我在IIS中添加<authentication mode="Windows" />
  • ,我同時啓用匿名身份驗證和Windows身份驗證
  • Global.asax.cs,我將AuthorizeAttribute添加到所有控制器:GlobalConfiguration.Configuration.Filters.Add(new System.Web.Http.AuthorizeAttribute());
  • 應該可以在沒有身份驗證的情況下訪問的單個函數已獲得[AllowAnonymous]屬性集。

不知道那裏發生了什麼,有人知道會發生什麼或如何調試嗎?

+0

因此,如果您刪除身份驗證並僅允許匿名訪問,則此api可以正確地在IIS上運行? –

+0

不,該API在我的開發人員計算機上的IIS上正常工作,應用程序的配置與服務器上的相同。如果我從IIS設置中刪除Windows身份驗證,則沒有任何更改。如果我從我的代碼中刪除授權屬性,則沒有任何變化。如果我同時刪除,我可以作爲匿名用戶訪問所有內容。 – Alexander

+0

應用程序池被禁用真的很奇怪。您是否嘗試使用不同的應用程序池或其他?你也說在同一臺服務器上還有其他應用程序啓用了windows auth,並且它們不會使程序崩潰? –

回答

0

確保\ IIS_IUSRS(IIS 7.x)具有對應用文件夾的讀取權限。確保您使用的應用程序池標識位於IIS_IUSRS組(例如IIS APPPOOL \ DefaultAppPool)

相關問題