Ошибка ссылки на объект во время пользовательской инициализации поставщика состояния сеанса
Я написал пользовательский поставщик состояния сеанса, который отлично работает в режиме отладки, но после развертывания на сервере (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>
Если вы не умышленно пропустили тип.