我的网站在使用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