Object reference error during custom session state provider initialization
I have written a custom session state provider which works fine in debug mode but once deployed on the server (IIS 6) i get the following error:
Event code: 3008
Event message: A configuration error has occ开发者_运维问答urred.
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 line 282 is from web.config having the provider info, 3rd line below
<sessionState mode="Custom" customProvider="SessionStateStoreProvider" timeout="180">
<providers>
<add name="SessionStateStoreProvider" type="type full name" />
</providers>
</sessionState>
It means the "Object reference not set to an instance of an object" exception happens in one of your provider's methods (for example in the Initialize
method). There's a bug in that code.
So you can either put a breakpoint in there and debug, or surround overridden methods with a try catch that can transform the exception in text, like this:
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);
}
}
}
If you put the .PDB files aside the .DLL, you should now see the error line number.
You're not specifying the type correctly in your configuration.
Example:
<sessionState mode="Custom" customProvider="SessionStateStoreProvider">
<providers>
<add name="SessionStateStoreProvider"
type="Namespace.To.Your.SessionStateStoreClass" />
</providers>
</sessionState>
Unless you intentionally omitted the type.
精彩评论