我正在构建应该在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