Pregunta

Mi empresa se está ejecutando en un problema con un servicio web que está escrito en C # / ASP.Net. El servicio recibe una clave de identidad para los datos en SQL Server y un camino para generar y guardar un informe en PDF para estos datos.

En la mayoría de los casos, este devuelve el servicio Web resultados a las páginas web de llamada muy rápidamente, por lo general dentro de unos pocos segundos como máximo.

Sin embargo, parece que de vez en cuando para golpear una desaceleración significativa. La aplicación web llamada al servicio web generará un error de tiempo de espera cuando se produce esta desaceleración. Hemos comprobado y el PDF se pone creado y guardado en el servidor, lo que parece que el servicio web con el tiempo haya terminado de ejecutarse. Al parecer se necesita aproximadamente 1 a 2 minutos para que el proceso ha finalizado. El PDF se genera utilizando ActiveReports de Data Dynamics.

cCuando se produce este problema, hacer un pequeño cambio en el archivo de configuración del servicio web (es decir, la adición de un espacio en blanco para una línea de cadena de conexión) parece que reiniciar el servicio web y todo está perfectamente bien para un período de tiempo después.

no parecen

Otras aplicaciones web que se ejecutan en el mismo servidor web para experimentar este tipo de comportamiento, solamente este servicio web en particular.

He añadido el código para el servicio web a continuación. Es llamadas básicas a las bibliotecas 3 ª parte. No somos capaces de recrear este problema en la prueba.

Me pregunto qué podría estar causando este problema?

[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";
}
¿Fue útil?

Solución

Sólo una breve nota: Usted no está desechando su StreamWriter y tal vez hay otros objetos desechables en su servicio, también. Esto podría causar una pérdida de memoria en su aplicación que podría conducir IIS para reiniciar el proceso de trabajo. A pesar de que esto probablemente no será la solución a su problema, ya que dispone de objetos desechables ayudará a prevenir problemas en el futuro!

Otros consejos

Vas a tener que IIS depuración cuando esto sucede para ver donde se encuentra el verdadero problema.

Se debe utilizar la IIS Herramienta de diagnóstico depurar para ayudarle a determinar lo que está pasando.

También me gustaría leer el blog de Tess Ferrandez la depuración IIS problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top