Ошибка ссылки на объект во время пользовательской инициализации поставщика состояния сеанса

Я написал пользовательский поставщик состояния сеанса, который отлично работает в режиме отладки, но после развертывания на сервере (IIS 6) я получаю следующую ошибку:

Event code: 3008 
Event message: A configuration error has occurred. 
Event time: 10/7/2011 3:05:02 PM 
Event time (UTC): 10/7/2011 9:35:02 AM 
Event ID: 00e2c8b1368b45608bb062eb2ba9d0db 
Event sequence: 2 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/Root/bizapp-1-129624536989844520 
    Trust level: Full 
    Application Virtual Path: ...
    Application Path: ...
    Machine name: ...

Process information: 
    Process ID: 7556 
    Process name: w3wp.exe 
    Account name: ...

Exception information: 
    Exception type: ConfigurationErrorsException 
    Exception message: Object reference not set to an instance of an object. (E:\Program Files\BizAPP\WebClient\web.config line 282) 

Request information: 
    Request URL: http://localhost:8080/bizapp/login.aspx 
    Request path: /bizapp/login.aspx 
    User host address: 127.0.0.1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: ...

Thread information: 
    Thread ID: 1 
    Thread account name: ...
    Is impersonating: False 
    Stack trace:    at System.Web.Configuration.ProvidersHelper.InstantiateProvider(ProviderSettings providerSettings, Type providerType)
   at System.Web.SessionState.SessionStateModule.InitCustomStore(SessionStateSection config)
   at System.Web.SessionState.SessionStateModule.InitModuleFromConfig(HttpApplication app, SessionStateSection config)
   at System.Web.SessionState.SessionStateModule.Init(HttpApplication app)
   at System.Web.HttpApplication.InitModulesCommon()
   at System.Web.HttpApplication.InitModules()
   at System.Web.HttpApplication.InitInternal(HttpContext context, HttpApplicationState state, MethodInfo[] handlers)
   at System.Web.HttpApplicationFactory.GetNormalApplicationInstance(HttpContext context)
   at System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context)
   at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)

EDIT строка 282 взята из web.config с информацией о провайдере, третья строка ниже

<sessionState mode="Custom" customProvider="SessionStateStoreProvider" timeout="180">
            <providers>
                <add name="SessionStateStoreProvider" type="type full name" />
            </providers>
        </sessionState>

2 ответа

Решение

Это означает, что исключение "Ссылка на объект не установлена ​​на экземпляр объекта" происходит в одном из методов вашего провайдера (например, в Initialize метод). В этом коде есть ошибка.

Таким образом, вы можете либо поставить точку останова и отладить, либо окружить переопределенные методы с помощью try catch, который может преобразовать исключение в текст, например так:

public class YourSessionState : SessionStateStoreProviderBase
{
    public override void Initialize(string name, NameValueCollection config)
    {
        try
        {
            // your original Initialize code here
        }
        catch (Exception e)
        {
            throw new Exception("Error in initialize: " + e);
        }
    }
}

Если вы отложите файлы.PDB в стороне.DLL, вы должны увидеть номер строки ошибки.

Вы не указали тип правильно в вашей конфигурации.

Пример:

<sessionState mode="Custom" customProvider="SessionStateStoreProvider">
  <providers>
    <add name="SessionStateStoreProvider"
         type="Namespace.To.Your.SessionStateStoreClass" />
  </providers>
</sessionState>

Если вы не умышленно пропустили тип.

Другие вопросы по тегам