Iis SSRS 2005 API导致应用程序池崩溃

Iis SSRS 2005 API导致应用程序池崩溃,iis,reporting,service,reportingservices-2005,.net-3.5,Iis,Reporting,Service,Reportingservices 2005,.net 3.5,我的站点在使用Reporting Services manager时出现应用程序池崩溃问题。这在多个安装中发生。我已将Reports和ReportServer网站分离到各自的应用程序池中,以挑出问题,并已将问题本地化到ReportServer,因为它是唯一一个崩溃的应用程序池 这始于我们实现ReportingServices2005 API时。下面是我们用来检索SSRS文件夹中报告列表的示例调用 目前,我们的应用程序使用javascript(Jquery)对C#.NET函数进行ajax调用,该函

我的站点在使用Reporting Services manager时出现应用程序池崩溃问题。这在多个安装中发生。我已将Reports和ReportServer网站分离到各自的应用程序池中,以挑出问题,并已将问题本地化到ReportServer,因为它是唯一一个崩溃的应用程序池

这始于我们实现ReportingServices2005 API时。下面是我们用来检索SSRS文件夹中报告列表的示例调用

目前,我们的应用程序使用javascript(Jquery)对C#.NET函数进行ajax调用,该函数进行SSRSAPI调用

这似乎是随机发生的,因为应用程序池在数天内不会崩溃,或者在重新启动后数小时内崩溃。一旦发生此错误,应用程序池将拒绝所有未来的连接,但是IIS UI不会显示应用程序池已停止。httperr日志显示由于快速故障保护,应用程序池被禁用。当快速故障保护关闭时,崩溃仍会发生,应用程序池会断开所有连接

我们已经查看了应用程序池和报告服务的所有日志。我们还向IIS添加了调试诊断工具,以从服务器检索转储文件。没有什么明显的东西向我们扑来,我们现在不知所措

Reporting Services API调用示例:

    [WebMethod(EnableSession = false)]
    [ScriptMethod]
    public List<CatalogItem> GetReportList()
    {
        CatalogItem[] items = null;
        List<CatalogItem> ret = new List<CatalogItem>();
        try
        {
            ReportingService2005 rs = new ReportingService2005();
            rs.Url = ConfigurationManager.AppSettings["Reporting_Services_Url"];
            rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

            // Use the reports path in the app config 
            string path = ConfigurationManager.AppSettings["ReportServer_ReportList_Path"];

            if (path == null || path == "") path = "/"; // send in at least a base root "/"
            items = rs.ListChildren(path, true);

            foreach (CatalogItem item in items)
            {
                if (item.Type == ItemTypeEnum.Folder || item.Type == ItemTypeEnum.Report)
                {
                    if (item.Name != "Search Reports" && item.Name != "My Reports" && item.Name != "Users Folders" && item.Name != "Data Sources")
                        ret.Add(item);
                }
            }
        }
        catch (System.Exception ex)
        {
            Guid? guid = ExceptionPolicy.HandledException(ex);
            // json object to include the guid as well as the exception info, for UI retrieval
            string jsonErrData = AjaxErrorHandling.CreateJsonFormat(guid, ex.Message, ex.GetType().ToString());
            throw new Exception(jsonErrData);
        }
        return ret;
    }
[WebMethod(EnableSession=false)]
[脚本方法]
公共列表GetReportList()
{
CatalogItem[]项=null;
List ret=新列表();
尝试
{
ReportingService2005 rs=新的ReportingService2005();
rs.Url=ConfigurationManager.AppSettings[“报告服务”Url];
rs.Credentials=System.Net.CredentialCache.DefaultCredentials;
//使用应用程序配置中的报告路径
字符串路径=ConfigurationManager.AppSettings[“ReportServer\u ReportList\u path”];
如果(path==null | | path==“”)path=“/”;//至少发送一个基根“/”
items=rs.ListChildren(路径,true);
foreach(项目中的目录项目)
{
if(item.Type==ItemTypeEnum.Folder | | item.Type==ItemTypeEnum.Report)
{
if(item.Name!=“搜索报告”&&item.Name!=“我的报告”&&item.Name!=“用户文件夹”&&item.Name!=“数据源”)
重新添加(项目);
}
}
}
catch(System.Exception-ex)
{
Guid?Guid=ExceptionPolicy.HandledException(ex);
//json对象,包括guid和异常信息,用于UI检索
字符串JSONERDATA=AjaxErrorHandling.CreateJsonFormat(guid,例如Message,例如GetType().ToString());
抛出新异常(jsonErrData);
}
返回ret;
}
转储日志警告:

    [WebMethod(EnableSession = false)]
    [ScriptMethod]
    public List<CatalogItem> GetReportList()
    {
        CatalogItem[] items = null;
        List<CatalogItem> ret = new List<CatalogItem>();
        try
        {
            ReportingService2005 rs = new ReportingService2005();
            rs.Url = ConfigurationManager.AppSettings["Reporting_Services_Url"];
            rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

            // Use the reports path in the app config 
            string path = ConfigurationManager.AppSettings["ReportServer_ReportList_Path"];

            if (path == null || path == "") path = "/"; // send in at least a base root "/"
            items = rs.ListChildren(path, true);

            foreach (CatalogItem item in items)
            {
                if (item.Type == ItemTypeEnum.Folder || item.Type == ItemTypeEnum.Report)
                {
                    if (item.Name != "Search Reports" && item.Name != "My Reports" && item.Name != "Users Folders" && item.Name != "Data Sources")
                        ret.Add(item);
                }
            }
        }
        catch (System.Exception ex)
        {
            Guid? guid = ExceptionPolicy.HandledException(ex);
            // json object to include the guid as well as the exception info, for UI retrieval
            string jsonErrData = AjaxErrorHandling.CreateJsonFormat(guid, ex.Message, ex.GetType().ToString());
            throw new Exception(jsonErrData);
        }
        return ret;
    }
崩溃\u规则\u目标\u日期\u 11\u 03\u 2010\u时间\u 09\u 16\u 14AM\u w3wp.exe\u ReportServer\u PID\u 5256\u 371\u Manual Dump.dmp中的以下线程正在等待通过WinSock从另一台服务器返回数据 对WinSock的调用源自0x02a6a1c3,目的地为IP地址为127.0.0.1的端口80

(62)1.12%的螺纹堵塞

确保此应用程序调用的任何远程服务器都正常工作,并且两台服务器之间没有网络问题。如果问题仍然存在,请联系应用程序供应商以获得进一步帮助

转储有问题的线程

线程62-系统ID 3024 入口点mscorwks!线程::intermediateThreadProc 创建时间2010年11月2日下午7:21:00 在用户模式下花费的时间0天00:00:00.734 在内核模式下花费的时间0天00:00:00.156

此线程正在等待通过WinSock从另一台服务器返回数据

对WinSock的调用源自0x02a6a1c3,目的地为IP地址为127.0.0.1的端口80

线程62 OS线程Id:0xbd0(62)ESP EIP上的WinDbg转储访问 2b13edb0 7c82860c[NDirectMethodFrameStandalone:2b13edb0] System.Net.UnsafeNclNativeMethods+OSSOCK.recv(IntPtr,字节*,Int32, System.Net.Sockets.SocketFlags)2b13edc8 7a581b04 System.Net.Sockets.Socket.Receive(字节[],Int32,Int32, System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError ByRef) 2b13ee00 7a581a00系统.Net.Sockets.Socket.Receive(字节[],Int32, Int32,System.Net.Sockets.SocketFlags)2b13ee20 7a58b854 System.Net.Sockets.NetworkStream.Read(字节[],Int32,Int32)2b13ee50 7a58b7bb System.Net.PooledStream.Read(字节[],Int32,Int32)2b13ee6c 7a58b4aa System.Net.Connection.SyncRead(System.Net.HttpWebRequest, 布尔值,布尔值)2b13eec0 7a58b30a System.Net.Connection.PollAndRead(System.Net.HttpWebRequest,布尔值) 2b13eed8 7a58b29b System.Net.ConnectStream.PollAndRead(布尔值) 2b13eee4 7a58b132系统.Net.HttpWebRequest.EndWriteHeaders(布尔值) 2b13ef10 7a58b056 System.Net.HttpWebRequest.WriteHeadersCallback(System.Net.WebExceptionStatus, System.Net.ConnectStream,布尔值)2b13ef24 7a58ac11 System.Net.ConnectStream.WriteHeaders(布尔值)2b13ef78 7a588f82 System.Net.HttpWebRequest.EndSubmitRequest()2b13efa4 7a588e9f System.Net.HttpWebRequest.SetRequestSubmitDone(System.Net.ConnectStream) 2b13efb8 7a5888c2系统.Net.Connection.CompleteTestartRequest(布尔, System.Net.HttpWebRequest,System.Net.TriState)2b13efe8 7a588233 System.Net.Connection.SubmitRequest(System.Net.HttpWebRequest) 2b13f02c 7a587bac System.Net.ServicePoint.SubmitRequest(System.Net.HttpWebRequest, 系统字符串)2b13f064 7a587479 System.Net.HttpWebRequest.SubmitRequest(System.Net.ServicePoint) 2b13f090 7aaaa4d4 System.Net.HttpWebRequest.GetResponse()2b13f0d0 65dda7e5 System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(System.Net.WebRequest) 2b13f100 65dde895 System.Web.Services.Protocols.HttpWeb