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

3

我的网站在使用Reporting Services管理器时出现了应用程序池崩溃的问题。这种情况发生在多个安装中。我已经将报告和ReportServer网站分别放入它们自己的应用程序池中,以排除问题,并将问题定位到了ReportServer,因为它是唯一崩溃的应用程序池。

这是在我们实施ReportingServices2005 API时开始的。下面附上一个我们用来检索SSRS文件夹中报告列表的示例调用。

目前,我们的应用程序使用JavaScript(Jquery)向C# .NET函数发出ajax调用,该函数进行SSRS API调用。

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

我们已查看了所有应用程序池和报告服务的日志。我们还向IIS添加了Debug Diagnostics工具,以从服务器检索转储文件。没有明显的问题引起我们的注意,现在我们感到无助。

示例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;
    }

警告:Dump日志

Crash_Rule_Targets_Date_11_03_2010__Time_09_16_14AM_w3wp.exe_ReportServer_PID_5256_371_Manual Dump.dmp中的以下线程正在通过WinSock等待来自另一台服务器的数据返回 WinSock的调用起源于0x02a6a1c3,并且目标是IP地址为127.0.0.1的80端口

(62)1.12%的线程被阻止

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

相关线程:

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

该线程正在通过WinSock等待来自另一台服务器的数据返回。

WinSock的调用起源于0x02a6a1c3,并且目标是IP地址为127.0.0.1的80端口

WinDbg转储访问线程62 OS线程ID: 0xbd0 (62) ESP EIP 2b13edb0 7c82860c [NDirectMethodFrameStandalone: 2b13edb0] System.Net.UnsafeNclNativeMethods + OSSOCK.recv(IntPtr,Byte*,Int32, System.Net.Sockets.SocketFlags) 2b13edc8 7a581b04 System.Net.Sockets.Socket.Receive(Byte[],Int32,Int32, System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError ByRef) 2b13ee00 7a581a00 System.Net.Sockets.Socket.Receive(Byte[],Int32, Int32,System.Net.Sockets.SocketFlags) 2b13ee20 7a58b854 System.Net.Sockets.NetworkStream.Read(Byte[],Int32,Int32) 2b13ee50 7a58b7bb System.Net.PooledStream.Read(Byte[],Int32,Int32) 2b13ee6c 7a58b4aa System.Net.Connection.SyncRead(System.Net.HttpWebRequest, Boolean,Boolean) 2b13eec0 7a58b30a System.Net.Connection.PollAndRead(System.Net.HttpWebRequest,Boolean) 2b13eed8 7a58b29b System.Net.ConnectStream.PollAndRead(Boolean) 2b13eee4 7a58b132 System.Net.HttpWebRequest.EndWriteHeaders(Boolean) 2b13ef10 7a58b056 System.Net.HttpWebRequest.WriteHeadersCallback(System.Net.WebExceptionStatus, System.Net.ConnectStream,Boolean) 2b13ef24 7a58ac11 System.Net.ConnectStream.WriteHeaders(Boolean) 2b13ef78 7a588f82 System.Net.HttpWebRequest.EndSubmitRequest() 2b13efa4 7a588e9f System.Net.HttpWebRequest.SetRequestSubmitDone(System.Net.ConnectStream) 2b13efb8 7a5888c2 System.Net.Connection.CompleteStartRequest(Boolean, System.Net.HttpWebRequest,System.Net.TriState) 2b13efe8 7a588233 System.Net.Connection.SubmitRequest(System.Net.HttpWebRequest) 2b13f02c 7a587bac System.Net.ServicePoint.SubmitRequest(System.Net.HttpWebRequest, System.String) 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.HttpWebClientProtocol.GetWebResponse(System.Net.WebRequest) 2b13f104 2f51e76e Microsoft.ReportingServices.UI.Global + RSWebServiceWrapper.GetWebResponse(System.Net.WebRequest) 2b13f114 65e09905 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(System.String, System.Object[]) 2b13f158 2be6bd5c Microsoft.SqlServer.ReportingServices2005.ReportingService2005.ListSecureMethods() 2b13f164 2f51df12 Microsoft.SqlServer.ReportingServices2005.RSConnection.GetSecureMethods() 2b13f19c 2f51de3a Microsoft.ReportingServices.UI.Global + RSWebServiceWrapper.GetSecureMethods() 2b13f1c4 2f51dd9b Microsoft.SqlServer.ReportingServices2005.RSConnection.IsSecureMethod(System.String) 2b13f1dc 2f51dd13 Microsoft.SqlServer.ReportingServices2005.RSConnection.ValidateConnection() 2b13f204 2f5197d2 Microsoft.ReportingServices.UI.Global.SecureAllAPI() 2b13f20c 2f519720 Microsoft.ReportingServices.UI.ReportingPage.EnsureHttpsLevel(Microsoft.ReportingServices.Diagnostics.HttpsLevel) 2b13f218 2f5191e4 Microsoft.ReportingServices.UI.ReportingPage.ReportingPage_Init(System.Object, System.EventArgs) 2b13f260 02a6b30d [MulticastFrame: 2b13f260] System.EventHandler.Invoke(System.Object,System.EventArgs) 2b13f274 660ab484 System.Web.UI.Control.OnInit(System.EventArgs) 2b13f288 660a72ed System.Web.UI.Page.OnInit(System.EventArgs) 2b13f294 660ab5de System.Web.UI.Control.InitRecursive(System.Web.UI.Control) 2b13f2b4 660a7a3b System.Web.UI.Page.ProcessRequestMain(Boolean,Boolean) 2b13f40c 660a7764 System.Web.UI.Page.ProcessRequest(Boolean,Boolean) 2b13f444
2个回答

0

检查您的数据库服务器健康状况,监控ReportServer数据库和您的应用程序数据库。运行分析器以捕捉死锁、锁定、事务超时等。

暂时禁用SSRS缓存,并查看是否再次出现此错误。


这种情况发生在多个客户端,其中服务器根本没有负载。运行报告的存储过程很复杂,但返回结果足够快且没有失败,可以排除我的数据库服务器健康问题。 - Drew Brumm
我不确定我是否理解SSRS缓存。我们已将其设置为仅保留一次报告的快照,但不确定是否有其他设置可用于清除缓存。此外,您认为数据库中的死锁或事务超时会导致应用程序池崩溃而不仅仅是在报告服务中发出警告吗? - Drew Brumm

0
有任何与 WAS 相关的事件日志吗?

事件日志中没有与 WAS 相关的内容。 - Drew Brumm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接