Iis SSRS 2005 API导致应用程序池崩溃
我的站点在使用Reporting Services manager时出现应用程序池崩溃问题。这在多个安装中发生。我已将Reports和ReportServer网站分离到各自的应用程序池中,以挑出问题,并已将问题本地化到ReportServer,因为它是唯一一个崩溃的应用程序池 这始于我们实现ReportingServices2005 API时。下面是我们用来检索SSRS文件夹中报告列表的示例调用 目前,我们的应用程序使用javascript(Jquery)对C#.NET函数进行ajax调用,该函数进行SSRSAPI调用 这似乎是随机发生的,因为应用程序池在数天内不会崩溃,或者在重新启动后数小时内崩溃。一旦发生此错误,应用程序池将拒绝所有未来的连接,但是IIS UI不会显示应用程序池已停止。httperr日志显示由于快速故障保护,应用程序池被禁用。当快速故障保护关闭时,崩溃仍会发生,应用程序池会断开所有连接 我们已经查看了应用程序池和报告服务的所有日志。我们还向IIS添加了调试诊断工具,以从服务器检索转储文件。没有什么明显的东西向我们扑来,我们现在不知所措 Reporting Services 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调用,该函
[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