HttpContext, вызывающий ошибку ссылки на объект только в IIS 7 - PullRequest
3 голосов
/ 10 января 2010

Я недавно настроил новый экземпляр моего личного сайта на том же сервере, что и реальный сайт. Новый экземпляр является «последней» конфигурацией, поэтому в нем есть все новые функции последней сборки, над которой я работаю. В последней сборке я изменил Target Framework на 3.5 с 2.0 как единственное действительно важное изменение, поскольку скомпилированные элементы идут быстрее.

На всех страницах участников и некоторых других страницах и некоторых пользовательских элементах управления я вызываю один или оба из этих двух элементов, и каждый из них дает сбой и вызывает ошибку Object reference not set to an instance of an object. Но не на каждой странице!

    public static string CurrentUserName
    {
        get
        {
            string userName = "";
            if (HttpContext.Current.User.Identity.IsAuthenticated)
                userName = HttpContext.Current.User.Identity.Name;
            return userName;
        }
    }

    public static string CurrentUserID
    {
        get
        {
            string userID = "";
            if (HttpContext.Current.User.Identity.IsAuthenticated) //Line 39
            {
                MembershipUser user = Membership.GetUser();
                userID = user.ProviderUserKey.ToString();
            }
            return userID;
        }
    }

С трассировкой стека:

[NullReferenceException: Object reference not set to an instance of an object.]
   isClasses.BizObjects.get_CurrentUserID() in C:\My Dropbox\Trunk\Classes\BizObjects.cs:39
   TheImageStore_Profile..ctor() in w:\dev\Member\Profile.aspx.cs:9
   ASP.member_profile_aspx..ctor() in c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\faba6118\7249af47\App_Web_profile.aspx.48943a5b.w8t4pvz5.0.cs:0
   __ASP.FastObjectFactory_app_web_profile_aspx_48943a5b_w8t4pvz5.Create_ASP_member_profile_aspx() in c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\faba6118\7249af47\App_Web_profile.aspx.48943a5b.w8t4pvz5.2.cs:0
   System.Web.Compilation.BuildResultCompiledType.CreateInstance() +32
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +119
   System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +33
   System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) +37
   System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +307
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Но учтите, это происходит только в IIS 7 на Server 2008, сайт отлично работает с Visual Studio 2008. Я даже прикрепил основной сайт в IIS к этому каталогу, и он делает то же самое. Как это возможно, и в чем причина?

Просто ради удовольствия я изменил Target Framework на 2.0, и он все еще вызывает ту же проблему. Также, похоже, что это происходит с или без входа посетителя, а не только на страницах пользователей.

Ответы [ 2 ]

1 голос
/ 10 января 2010

Либо HttpContext.Current.User, либо user.ProviderUserKey равно null.

Я бы предположил первое. Какая строка является строкой 39?

Кроме того, есть ли пользователь, вошедший в систему?

0 голосов
/ 10 января 2010

Какие модели аутентификации вы установили для IIS? По умолчанию доступен только анонимный доступ, который может установить для HttpContext.Current.User значение null.

...