Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SharePoint 2013,自定义IHttpModule NullReferenceException_Asp.net_Sharepoint_Iis_Nullreferenceexception_Ihttpmodule - Fatal编程技术网

Asp.net SharePoint 2013,自定义IHttpModule NullReferenceException

Asp.net SharePoint 2013,自定义IHttpModule NullReferenceException,asp.net,sharepoint,iis,nullreferenceexception,ihttpmodule,Asp.net,Sharepoint,Iis,Nullreferenceexception,Ihttpmodule,更新:问题已解决。继续阅读。 知道为什么添加自定义IHTTP模块显然不再可能了吗 我的问题涉及: 然而,这个问题很老,没有答案,也没有SharePoint上下文。我可以将我的HttpModule添加到任何标准ASP.NET WebForms页面 SharePoint正在IIS 8中托管。AppPool以集成模式运行。框架级别为4.0+ namespace My.Namespace { using System; using System.Web; public clas

更新:问题已解决。继续阅读。

知道为什么添加自定义IHTTP模块显然不再可能了吗

我的问题涉及: 然而,这个问题很老,没有答案,也没有SharePoint上下文。我可以将我的HttpModule添加到任何标准ASP.NET WebForms页面

SharePoint正在IIS 8中托管。AppPool以集成模式运行。框架级别为4.0+

namespace My.Namespace
{
    using System;
    using System.Web;

    public class CustomHttpModule : IHttpModule
    {
        private static readonly object mutex = new object();
        private static bool _isInitialized;

        public void Init(HttpApplication context)
        {
            if (!_isInitialized)
            {
                lock (mutex)
                {
                    if (_isInitialized) return;

                    context.BeginRequest += BeginRequest;
                    _isInitialized = true;
                }
            }
        }

        private void BeginRequest(object sender, EventArgs e)
        {   
        }

        public void Dispose()
        {
        }
    }
}
结果:

<system.webServer>
<!-- further elements omitted -->
<modules runAllManagedModulesForAllRequests="true">
  <remove name="AnonymousIdentification" />
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPNativeRequestModule" preCondition="integratedMode" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="DesignHttpModule" preCondition="integratedMode" type="Microsoft.SharePoint.Publishing.Design.DesignHttpModule, Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="FederatedAuthentication" type="Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SessionAuthentication" type="Microsoft.SharePoint.IdentityModel.SPSessionAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SPWindowsClaimsAuthentication" type="Microsoft.SharePoint.IdentityModel.SPWindowsClaimsAuthenticationHttpModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SPApplicationAuthentication" type="Microsoft.SharePoint.IdentityModel.SPApplicationAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="Session" type="System.Web.SessionState.SessionStateModule" />
  <add name="CustomModule" type="My.Namespace.CustomHttpModule, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=066b2229567b6747" />
</modules>
<!-- further elements omitted -->
</system.webServer>
[NullReferenceException:对象引用未设置为对象的实例。] System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification通知,布尔值isPostEvent)+30
System.Web.PipelineStepManager.ResumeSteps(异常错误)+1098
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext上下文,异步回调cb)+135
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequestWR,HttpContext上下文)+604

web.config如下所示:

<system.webServer>
<!-- further elements omitted -->
<modules runAllManagedModulesForAllRequests="true">
  <remove name="AnonymousIdentification" />
  <remove name="FileAuthorization" />
  <remove name="Profile" />
  <remove name="WebDAVModule" />
  <remove name="Session" />
  <add name="SPNativeRequestModule" preCondition="integratedMode" />
  <add name="SPRequestModule" preCondition="integratedMode" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="SharePoint14Module" preCondition="integratedMode" />
  <add name="StateServiceModule" type="Microsoft.Office.Server.Administration.StateModule, Microsoft.Office.Server, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="DesignHttpModule" preCondition="integratedMode" type="Microsoft.SharePoint.Publishing.Design.DesignHttpModule, Microsoft.SharePoint.Publishing, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="FederatedAuthentication" type="Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SessionAuthentication" type="Microsoft.SharePoint.IdentityModel.SPSessionAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SPWindowsClaimsAuthentication" type="Microsoft.SharePoint.IdentityModel.SPWindowsClaimsAuthenticationHttpModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="SPApplicationAuthentication" type="Microsoft.SharePoint.IdentityModel.SPApplicationAuthenticationModule, Microsoft.SharePoint.IdentityModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
  <add name="Session" type="System.Web.SessionState.SessionStateModule" />
  <add name="CustomModule" type="My.Namespace.CustomHttpModule, My.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=066b2229567b6747" />
</modules>
<!-- further elements omitted -->
</system.webServer>

一旦我不再附加BeginRequest事件,页面就会再次工作。但很明显,我的http模块已变得无用。

Edit 2013.09.19:Init()在应用程序启动时被调用两次。如果我只在第二次调用时附加事件,应用程序会工作,但事件不会触发

编辑2013.09.20:问题大概已经解决。我的Init()方法被触发了两次(其间没有调用Dispose()),这一事实让我假设IHttpModule实际上可能有两个共存的实例。虽然我之前的观察表明,第二个实例可以附加事件(不触发,但也不会对应用程序产生负面影响),但事实显然并非如此,反之亦然(我的静态初始化“锁”就是这样)


**因此,IHttpModule的两个实例都需要具有相同的“配置”(附带eventhandlers)。运行多个HttpApplication实例是完全正常的。这是ASP.NET(或IIS)内部为优化目的所做的事情。这是要记住的关键:问题解决了。编辑的问题。请参见编辑2013.09.20