我正在構建應該在Azure中託管的Api應用。有幾個控制器,它們都從BaseController繼承:Controller ... Base Controller有一個方法,它讀取授權標頭,搜索數據庫並返回用戶(如果有的話)。在調用API之後,我想開始觸發WebJob來完成一些任務...關鍵是我無法發佈該應用程序,因爲每次我將用於將消息添加到WebJob隊列的「取消註釋」方法時,該應用程序都不會開始並僅顯示: 糟糕。 500內部服務器錯誤 啓動應用程序時發生錯誤。部署到Azure後,API應用無法啓動
讓我們到代碼,希望這將是更清晰之後...
[Route("api/[controller]")]
public class SendController : BaseController
{
public override OperationResult Get(Guid activityId)
{
var user = ValidateAndGetUser();
if (user == null)
{
connector.Log(null, activityId, Log.ActionType.Send, Log.SeverityLevel.Error, null, "User is null");
return new OperationResult
{
CampaignId = activityId,
IsSuceeded = false,
Type = OperationType.LoginFailed
};
}
if (activityId == Guid.Empty)
{
connector.Log(user.UserName, null, Log.ActionType.Send, Log.SeverityLevel.Error, null, "Activity ID is null");
return new OperationResult
{
UserName = user.UserName,
IsSuceeded = false,
Type = OperationType.RequestRejected
};
}
===commented section
/*try
{
connector.AddMessage(activityId, user, Log.ActionType.Send);
return new OperationResult
{
CampaignId = activityId,
//UserName = user.UserName,
UserName = user.UserName,
TextMessage = "Request processed.",
IsSuceeded = true,
Type = OperationType.RequestAccepted
};
}
catch (Exception e)
{
connector.Log(user.UserName, activityId, Log.ActionType.Send, Log.SeverityLevel.Error, e, "Add message failed.");
return new OperationResult
{
CampaignId = activityId,
UserName = user.UserName,
TextMessage = "Add message failed.",
IsSuceeded = false,
Type = OperationType.RequestFailed
};
}*/
===end commented section
===remove while above code is uncommented
return new OperationResult
{
CampaignId = activityId,
UserName = user.UserName,
TextMessage = "Add message failed.",
IsSuceeded = false,
Type = OperationType.RequestFailed
};
===end remove
}
}
正如你所看到的,try/catch語句被註釋掉了。到目前爲止,應用程序部署OK,我可以導航到API並獲得正確的結果,我可以添加授權標頭,連接器實例搜索用戶,一切正常。當我取消註釋TRY/CATCH塊時,魔術發生,因爲應用程序甚至不會啓動,部署也不會顯示任何錯誤消息,只是「Web應用程序已成功發佈」,並在打開網頁時得到「啓動時出錯應用程序。」
讚賞任何幫助或建議。
你好。 Thaks提出了一些建議,儘管他們並沒有真正的幫助(除了我學到了新東西)。我通過將庫函數的一部分直接移植到我的控制器類中解決了這個問題,這不是解決方案(代碼複製),但是,嘿,它可以工作... 我仍然驚訝爲什麼它不起作用,庫中的函數沒問題,在應用程序啓動之前調用其他結果導致應用程序失敗(我甚至無法將調試器安裝到控制器代碼的第一行,因爲procces已全部死亡)。 – Klemikaze