我有一個.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]
屬性集。
不知道那裏發生了什麼,有人知道會發生什麼或如何調試嗎?
因此,如果您刪除身份驗證並僅允許匿名訪問,則此api可以正確地在IIS上運行? –
不,該API在我的開發人員計算機上的IIS上正常工作,應用程序的配置與服務器上的相同。如果我從IIS設置中刪除Windows身份驗證,則沒有任何更改。如果我從我的代碼中刪除授權屬性,則沒有任何變化。如果我同時刪除,我可以作爲匿名用戶訪問所有內容。 – Alexander
應用程序池被禁用真的很奇怪。您是否嘗試使用不同的應用程序池或其他?你也說在同一臺服務器上還有其他應用程序啓用了windows auth,並且它們不會使程序崩潰? –