2016-10-04 5 views
0

저는 Azure에서 호스팅해야하는 Api App을 구축 중입니다. 컨트롤러에는 BaseController에서 상속하는 컨트롤러가 몇 가지 있습니다. 컨트롤러 ... 기본 컨트롤러에는 인증 헤더를 읽고 데이터베이스를 검색하여 사용자가있는 경우 사용자를 반환하는 한 가지 방법이 있습니다. 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 블록을 주석 처리 할 때 발생합니다. 앱이 시작되지 않거나 배포시 오류 메시지가 표시되지 않고 "웹 앱이 성공적으로 게시되었습니다."웹 페이지를 여는 중 "시작하는 동안 오류가 발생합니다. 응용 프로그램. "

도움이나 제안을 주시면 감사하겠습니다.

답변

1

이 시나리오에서는 원격 디버그를 사용하여 문제를 해결하는 것이 좋습니다. 자세한 내용은 this article을 참조하십시오. 배포 모드를 '디버그'로 설정해야합니다. 그게 도움이되지 않는다면. 자세한 문제를 확인하려면 diagnostics logging을 사용하십시오.

+0

안녕하세요. 제안을위한 탁신 (비록 내가 새로운 것을 배웠던 것을 제외하고는) 그들은 정말로 도움이되지 않았지만. 필자는 라이브러리 함수의 일부를 직접 컨트롤러 클래스 (코드 중복성)가 아닌 컨트롤러 클래스로 마이 그 레이션하여이 문제를 해결했지만 이봐, 작동 ... 여전히 작동하지 않는 이유는 놀랍습니다. 라이브러리의 함수는 응용 프로그램이 시작되기 전에 다른 사람에게 응용 프로그램 오류가 발생합니다 (procces가 모두 죽었 기 때문에 컨트롤러 코드의 첫 줄에 디버거를 붙일 수는 없었습니다). – Klemikaze