【发布时间】: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