【问题标题】:HttpHandler return 403 in SharePoint 2010SharePoint 2010 中的 HttpHandler 返回 403
【发布时间】:2015-01-27 09:55:03
【问题描述】:

我有一个使用 HttpHandler 在 SharePoint 2010 中运行的网站。 网站启动后,一切正常。

一段时间后,HttpHandler 开始返回 403 (Forbidden)。

手动回收应用程序池可以暂时解决问题,但大约一天后会恢复(取决于站点上的负载量)。

有趣的是,这个问题似乎只影响 HttpHandlers(我的自定义处理程序和 SharePoint 自己的 HttpHandlers)——aspx 页面工作得很好。

HttpHandler 是这样配置的:

  <system.web>
    <httpHandlers>
      <add verb="*" path="*.ajax" type="LI_BR.UserControls.web.ajax.AjaxHttpHandler" validate="false" />
    </httpHandlers>
  </system.web>

  <system.webServer>
    <handlers>
      <add name="AjaxHandler" path="*.ajax" verb="*" type="LI_BR.UserControls.web.ajax.AjaxHttpHandler" resourceType="Unspecified" preCondition="integratedMode" />
    </handlers>
  </system.webServer>

检查 IIS 日志,我发现:

对 HttpHandler 的成功调用(只是证明它有时确实有效)

2015-01-23 06:41:42 192.168.0.XX POST /Registration/SysFelt.ajax WorkerID=12&FeltID=1796&TabelID=&ObjektID=0 20113 DOMAIN\USER 192.168.0.XX Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+InfoPath.2) 200 0 0 31

请求失败

2015-01-26 03:32:16 192.168.0.XX POST /Registration/SysFelt.ajax WorkerID=12&FeltID=1796&TabelID=&ObjektID=0 20113 DOMAIN\USER 192.168.0.XX Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+InfoPath.2) 403 0 0 5662

我试图找到 403 何时开始的模式,据我所知,如果回收后的第一个请求是对 HttpHandler 的,就会发生这种情况。这只是一个理论,我从这个模式的日志中没有得到任何其他迹象。在第一个失败的请求之后,对任何 HttpHandler 的每个请求(即使对于其他用户)都返回相同的 403。

日志中的一个 sn-p 表明这种模式:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2015-01-26 03:32:16
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2015-01-26 03:32:16 192.168.0.XX POST /time/SysFelt.ajax WorkerID=12&FeltID=1796&TabelID=&ObjektID=0 20113 DOMAIN\USER 192.168.0.XX Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+InfoPath.2) 403 0 0 5662

或(来自姊妹网站 - 有同样的问题)

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2015-01-27 06:30:10
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2015-01-27 06:30:10 192.168.0.XX POST /time/SysFelt.ajax WorkerID=12&FeltID=1796&TabelID=&ObjektID=0 20114 - 192.168.0.63 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+InfoPath.2) 401 1 2148074254 5849
2015-01-27 06:30:10 192.168.0.XX POST /time/SysFelt.ajax WorkerID=12&FeltID=1796&TabelID=&ObjektID=0 20114 DOMAIN\USER 192.168.0.XX Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1;+WOW64;+Trident/7.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET4.0C;+.NET4.0E;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+InfoPath.2) 403 0 0 748

注意:IP 和域/用户名的最后一部分已在日志 sn-ps 中进行了编辑。不过,所有日志条目都是针对同一用户的。

注意:日志中的时间戳偏离 1 小时(日志中的 09:00 变为 08:00) - 不确定这是否意味着什么。

HttpHandler当前正在使用

public class AjaxHttpHandler : IHttpHandler, IRequiresSessionState
{
    public bool IsReusable { get { return false; } 
}

我尝试将 IsReusable 更改为 true,并删除 IRequiresSessionState,所以看看这是否有任何区别 - 似乎没有。

我不知道为什么会出现这个问题,而且我也没有办法解决这个问题。

【问题讨论】:

    标签: asp.net sharepoint-2010 httphandler


    【解决方案1】:

    如果其他人遇到这个问题,我会在这里发布我的解决方案。

    我从来没有弄清楚错误发生的原因,但我似乎确实找到了解决方法。解决方法与我的理论密切相关,即错误发生是因为回收后的第一次调用是针对 HttpHandler。

    解决方案很简单,但一点也不漂亮。 我在可以调用 HttpHandler 的页面上插入了一个 JavaScript。脚本只是在 20 分钟后重定向到无法调用 HttpHandler 的页面(在我的情况下,是首页)。这意味着回收后的第一个请求始终是到一个 aspx 页面 - 之后一切(包括 HttpHandler)都工作正常。

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多