2015-04-18 1 views
1

Я создал образец проекта WebApp-WebAPI-OpenIDConnect-DotNet. Справочный проект доступен по адресу git.WebApp-WebAPI-OpenIDConnect-DotNet не развертывается на azure

Я следил за всеми шагами, как описано в git repo. Мой примерный проект работает на локальном хосте. Но когда я развертываю свой проект на Azure, он дает следующую ошибку.

Пожалуйста, проверьте ниже трассировку стека.

Трассировка стека:

[NullReferenceException: Object reference not set to an instance of an object.] 
    CMS.Web.Utils.NaiveSessionCache.Load() in c:\a\src\CMS.Web\CMS.Web\Utils\NaiveSessionCache.cs:30 
    CMS.Web.Utils.NaiveSessionCache..ctor(String userId) in c:\a\src\CMS.Web\CMS.Web\Utils\NaiveSessionCache.cs:23 
    CMS.Web.Startup.<ConfigureAuth>b__2(AuthorizationCodeReceivedNotification context) in c:\a\src\CMS.Web\CMS.Web\App_Start\Startup.Auth.cs:83 
    Microsoft.Owin.Security.OpenIdConnect.<AuthenticateCoreAsync>d__1a.MoveNext() +4995 
    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +22 
    Microsoft.Owin.Security.OpenIdConnect.<AuthenticateCoreAsync>d__1a.MoveNext() +6529 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Security.Infrastructure.<BaseInitializeAsync>d__0.MoveNext() +595 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Security.Infrastructure.<Invoke>d__0.MoveNext() +264 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +191 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Security.Infrastructure.<Invoke>d__0.MoveNext() +665 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +191 
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93 
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52 
    Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<DoFinalWork>d__2.MoveNext() +189 
    Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar) +69 
    Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar) +64 
    System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +415 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

ответ

0

Я вижу подобный вопрос, HttpContext.Current является недействительным изначально при получении маркера и, когда он пытается сохранить этот маркер в кэш, вы видите эту ошибку в Методы Load/Persist. Не уверен, что это ожидалось, но добавление нечетной проверки на HttpContext.Current в методах Load и Persist уменьшит исключение ссылки на null.

1

Я нахожусь в идентичном случае. Мой проект работает над средой разработки и получает исключение NullRefenceException на той же строке после публикации его в производственной среде. Поработав над этим, я обнаружил, что Request.Current был в порядке, но Request.Current.Session был null. Так, I've изменил код, чтобы быть похожим, что:

public void Load() 
    { 
     lock (FileLock) 
     { 
      if (HttpContext.Current != null && HttpContext.Current.Session != null) 
      { 

       if (HttpContext.Current.Session[CacheId] == null) 
        throw new System.NullReferenceException("CacheId is null"); 

       Deserialize((byte[]) HttpContext.Current.Session[CacheId]); 
      } 
     } 
    } 

После этого подмигнули дает мне WebExcetpion 400 (BAD REQUEST) и that's случающиеся до начала сессии создается.

Для Handle такого рода ошибки, я изменил Startup.Auth.cs:

   Notifications = new OpenIdConnectAuthenticationNotifications() 
       { 
        AuthenticationFailed = OnAuthenticationFailed, 
        ... 
       } 

, а затем:

private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification) 
    { 
     UtilLogger.PublishException(notification.Exception); 

     notification.HandleResponse(); 
     notification.Response.Redirect($"{postLogoutRedirectUri}?message={notification.Exception.Message}"); 
     return Task.FromResult(0); 
    }