저희 회사는 C#/ASP.Net로 작성된 웹 서비스에 문제가 있습니다. 이 서비스는 SQL Server의 데이터에 대한 ID 키와이 데이터에 대한 PDF 보고서를 생성하고 저장하는 경로를받습니다.웹 서비스가 가끔씩 느려집니다.
대부분의 경우이 웹 서비스는 결과를 호출하는 웹 페이지에 매우 신속하게 대개 몇 초 이내에 반환합니다.
그러나 때때로 심각한 속도 저하를 초래하는 것으로 보입니다. 이 속도 저하가 발생하면 웹 서비스를 호출하는 웹 응용 프로그램에서 시간 초과 오류가 발생합니다. 확인한 결과 PDF가 생성되어 서버에 저장되므로 결국 웹 서비스가 실행되는 것처럼 보입니다. 처리가 완료되는 데 약 1 ~ 2 분이 소요되는 것 같습니다. PDF는 데이터 역학의 ActiveReports를 사용하여 생성됩니다.
이 문제가 발생하면 웹 서비스의 구성 파일을 약간 변경 (예 : 연결 문자열 줄에 공백 추가)하여 웹 서비스를 다시 시작한 것으로 보이며 나중에 일정 기간 동안 모든 것이 완벽하게 확인됩니다.
동일한 웹 서버에서 실행되는 다른 웹 응용 프로그램에서는 이러한 특정 웹 서비스 만 이러한 유형의 동작이 발생하지 않는 것처럼 보입니다.
아래 웹 서비스 코드를 추가했습니다. 타사 라이브러리에 대한 기본 호출입니다. 테스트에서이 문제를 재현 할 수는 없습니다.
이 문제의 원인은 무엇입니까?
[WebMethod]
public string Publish(int identity, string transactionType, string directory, string filename)
{
try
{
AdpConnection Conn = new AdpConnection(ConfigurationManager.AppSettings["myDBConnString"]);
AdpCommand Cmd = new AdpCommand("storedproc_GetData", oConn);
AdpParameter Param;
Cmd.CommandType = CommandType.StoredProcedure;
Param = Cmd.CreateParameter("@Identity", DbType.Int32);
Param.Value = identity;
Cmd.Parameters.Add(oParam);
Conn.Open();
string aResponse = Cmd.ExecuteScalar().ToString();
Conn.Close();
if (transactionType == "typeA")
{
//Parse response
DataSet dsResponse = ParseDataResponse(aResponse);
//dsResponse.WriteXml(@ConfigurationManager.AppSettings["DocsDir"] + identity.ToString() + ".xml");
DataDynamics.ActiveReports.ActiveReport3 rpt = new DataDynamics.ActiveReports.ActiveReport3();
rpt.LoadLayout(@ConfigurationManager.AppSettings["myReportPath"] + "TypeA.rpx");
rpt.AddNamedItem("ReportPath", @ConfigurationManager.AppSettings["myReportPath"]);
rpt.AddNamedItem("XMLSTRING", FormatXML(dsResponse.GetXml()));
DataDynamics.ActiveReports.DataSources.XMLDataSource xmlds = new DataDynamics.ActiveReports.DataSources.XMLDataSource();
xmlds.FileURL = null;
xmlds.RecordsetPattern = "//DataPatternA";
xmlds.LoadXML(FormatXML(dsResponse.GetXml()));
if (!System.IO.Directory.Exists(@ConfigurationManager.AppSettings["DocsDir"] + directory + @"\"))
{
System.IO.Directory.CreateDirectory(@ConfigurationManager.AppSettings["DocsDir"] + directory + @"\");
}
string sXML = FormatXML(dsResponse.GetXml());
StreamWriter sw = new StreamWriter(@ConfigurationManager.AppSettings["DocsDir"] + directory + @"\" + filename + ".xml", false);
sw.Write(sXML);
sw.Close();
rpt.DataSource = xmlds;
rpt.Run(true);
DataDynamics.ActiveReports.Export.Pdf.PdfExport xPdf = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
xPdf.Export(rpt.Document, @ConfigurationManager.AppSettings["DocsDir"] + directory + @"\" + filename + ".pdf");
}
}
catch(Exception ex)
{
return "Error: " + ex.ToString();
}
return @ConfigurationManager.AppSettings["DocsDir"] + directory + @"\" + filename + ".pdf";
}