public class CustomGlobal : vendorNamespace.Global { new protected void Application_Start(object sender,EventArgs e) { var logName = "SPPCustom"; if (!System.Diagnostics.EventLog.sourceExists(logName)) System.Diagnostics.EventLog.CreateEventSource(logName,"Application"); var text = "Hello from Application Start!"; System.Diagnostics.EventLog.WriteEntry(logName,"Application started!"); File.WriteallText(@"c:\ApplicationStart.txt",text); Debug.WriteLine(text); base.Application_Start(sender,e); } new protected void Session_Start(object sender,EventArgs e) { var logName = "SPPCustom"; if (!System.Diagnostics.EventLog.sourceExists(logName)) System.Diagnostics.EventLog.CreateEventSource(logName,"Application"); System.Diagnostics.EventLog.WriteEntry(logName,"Session started!"); base.Session_Start(sender,e); } }
我在网站的global.asax文件中引用我的代码,如下所示:
<%@ Application Codebehind="Global.asax.cs" Inherits="MyNamespace.CustomGlobal" Language="C#" %>
Application_Start代码不会执行,但Session_Start代码会执行.我可以编写事件并从Session_Start写出文本文件但是Application_Start,nadda.
有谁知道这里发生了什么?
编辑:
这是执行Jan的建议后的代码:
公共类CustomGlobal:HttpApplication
{
private readonly Global _global;
private readonly MethodInfo _appStartInfo;
private readonly MethodInfo _sessionStartInfo;
public CustomGlobal() { _global = new Global(); _appStartInfo = typeof(Global).getmethod("Application_Start",BindingFlags.Instance | BindingFlags.NonPublic); _sessionStartInfo = typeof(Global).getmethod("Session_Start",BindingFlags.Instance | BindingFlags.NonPublic); } protected void Application_Start(object sender,EventArgs e) { var logName = "SPPCustom"; if (!System.Diagnostics.EventLog.sourceExists(logName)) System.Diagnostics.EventLog.CreateEventSource(logName,"Application"); var text = "Hello Patient Portal from Application Start!"; System.Diagnostics.EventLog.WriteEntry(logName,"Application started!"); File.WriteallText(@"c:\PatientPortalApplicationStart.txt",text); Debug.WriteLine(text); //_sxaGlobal.ApplicationStart(sender,e); _appStartInfo.Invoke(_global,new[] {sender,e}); } }
现在它抛出以下错误:
[NullReferenceException: Object reference not set to an instance of an object.]
Global.Application_Start(Object sender,EventArgs e)28
[TargetInvocationException:调用目标抛出了异常.]
System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo方法,Object target,Object []参数,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeType typeOwner)0
System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo方法,Signature sig,RuntimeType typeOwner)72
System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture,Boolean skipVisibilityChecks)251
System.Reflection.RuntimeMethodInfo.Invoke(Object obj,CultureInfo文化)28
System.Reflection.MethodBase.Invoke(Object obj,Object []参数)19
CustomGlobal.Application_Start(Object sender,EventArgs e)231
[HttpException(0x80004005):调用目标抛出了异常.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context,HttpApplication app)9239341
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext context,MethodInfo [] handlers)131
System.Web.HttpApplication.InitSpecial(HttpApplicationState状态,MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)194
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext context)339
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)253
[HttpException(0x80004005):调用目标抛出了异常.]
System.Web.HttpRuntime.FirstRequestinit(HttpContext context)9157968
System.Web.HttpRuntime.EnsureFirstRequestinit(HttpContext context)97
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)256
解决方法
解决方案可能是私人成员的模式
public class CustomGlobal : HttpApplication { private readonly vendorGlobal _global; private readonly MethodInfo _appStartInfo; public CustomGlobal() { _global = new vendorGlobal(); _appStartInfo = typeof(vendorGlobal).getmethod("Application_Start",EventArgs e) { _appStartInfo.Invoke(_global,e}); // your custom code }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。