none
Crystal Report Web Service RRS feed

  • Pregunta

  • Hola a todos, buenos días

    Tengo el siguiente planteo:

    Una aplicación Windows para utilizar en web con VS 2005 que se conecta a SQL en un servidor via WebService.

    Para generar los reportes de esa aplicación, estuve investigando y me realicé lo siguiente:

    * Un WebService para CrystalReport con lo siguiente:

     -- un archivo ServerFileReportManager.asmx

    <%@ WebService language="C#" class="CrystalDecisions.Web.Services.ServerFileReportManager" %>

     --un archivo ServerFileReportService.asmx

    <%@ WebService language="C#" class="CrystalDecisions.Web.Services.ServerFileReportService" %>

     -- el archivo web.config

    <?xml version="1.0"?>

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <configSections>
        <sectionGroup name="crystalDecisions">
          <section name="serverFileReportManager" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
        </sectionGroup>
      </configSections>

      <crystalDecisions>
        <serverFileReportManager>
          <add key="rootDirectory" value="C:\Inetpub\wwwroot\CrystalReportsWebServices2005"/>
        </serverFileReportManager>
      </crystalDecisions>

      <appSettings/>
      <connectionStrings/>

      <system.web>
        <compilation debug="true">
          <assemblies>
            <add assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
          </assemblies>
        </compilation>
      </system.web>
    </configuration>

    Luego desde una página asp, lo intento utilizar en mi IIS (localhost)

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using System.IO;
    using System.Collections;

    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;

    public partial class _Default : System.Web.UI.Page
    {
        private ServerFileReport serverFileReport;
        private ReportManagerRequest reportManagerRequest;
        private ServerFileReportManagerProxy serverFileReportManagerProxy;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ArrayList reports = getReports();
                IDictionary sortedList = new SortedList();
                foreach (string path in reports)
                {
                    int reportNamePrefix = path.LastIndexOf(@"/") + 1;
                    int reportNameSufix = path.LastIndexOf(@"?");
                    int reportNameLength = reportNameSufix - reportNamePrefix;
                    string reportName = path.Substring(reportNamePrefix, reportNameLength);
                    reportName = reportName.Replace("%20", " ");
                    sortedList.Add(path, reportName);
                }
                reportsList.DataTextField = "value";
                reportsList.DataValueField = "key";
                reportsList.DataSource = sortedList;
                reportsList.DataBind();
            }
            else
            {
                serverFileReport = (ServerFileReport)Session["serverFileReport"];
                crystalReportViewer.ReportSource = serverFileReport;
            }
        }



        private void Page_Init(object sender, EventArgs e)
        {
            ConfigureCrystalReports();
        }

        private void ConfigureCrystalReports()
        {
        }
        protected void display_Click(object sender, EventArgs e)
        {
            serverFileReport = new ServerFileReport();
            serverFileReport.ReportPath = @"\" + reportsList.SelectedItem.ToString();
            serverFileReport.WebServiceUrl = "http://localhost/CrystalReportsWebServices/serverfilereportservice.asmx";
            Session["ServerFileReport"] = serverFileReport;
            crystalReportViewer.ReportSource = serverFileReport;
        }

        protected ArrayList getReports()
        {
            serverFileReport = new ServerFileReport();
            serverFileReport.ReportPath = "";
            serverFileReport.WebServiceUrl = "http://localhost/CrystalReportsWebServices/serverfilereportservice.asmx";
            reportManagerRequest = new ReportManagerRequest();
            reportManagerRequest.ExtraData = serverFileReport.GetExtraData();
            reportManagerRequest.ParentUri = serverFileReport.ToUri();
            serverFileReportManagerProxy = new ServerFileReportManagerProxy();
            serverFileReportManagerProxy.Url = "http://localhost/CrystalReportsWebServices/serverfilereportmanager.asmx";
            ReportManagerResponse reportManagerResponse = new ReportManagerResponse();
            reportManagerResponse = serverFileReportManagerProxy.ListChildObjects(reportManagerRequest);
            ArrayList remoteReports = new ArrayList();

            foreach (string reportUriString in reportManagerResponse.ReportUris)
            {
                serverFileReport = new ServerFileReport();
                serverFileReport = ServerFileReport.FromUri(reportUriString);
                if (serverFileReport.ObjectType == EnumServerFileType.REPORT)
                {
                    remoteReports.Add(reportUriString);
                }
            }
            return remoteReports;
        }
    }

    Esto me muestra una página con un combo, donde se cargan los reportes que se encuentran en la carpeta del directorio virtual creado en el ISS. Y muestra el reporte seleccionado al hacer click.

    Mi idea era, si es posible, en la aplicación windows form agregar un fromulario que inlcuya un webbrowser para mostrar el listado...

    el tema es el siguiente, cuando copio el servicio web en un servidor donde ubico los webservices (no el iss local) me muestra el siguiente error:

    Probé agregando en todas partes un encoding = utf-8, cambiar permisos en una carpeta temporal de windows donde ubica los archivos de asp temporales, eliminar y copiar nuevamente el webservice, cambiar configuración de la aplicación en el ISS.  La verdad es que no se cuál puede ser el problema. hay alguien por ahí que le haya sucedido lo mismo y lo pudo solucionar.


    Carla Bongiovani

    En el servidor, en el visor de sucesos tengo el siguiente warning :

    Código de evento: 3008

    Mensaje de evento: A configuration error has occurred.

    Tiempo de evento: 14/03/2012 11:08:33 a.m.

    Tiempo de evento (UTC): 14/03/2012 02:08:33 p.m.

    Id. de evento: d54e34b5eaf34d77a1d5d8046c5cfa7a

    Secuencia de evento: 19

    Ocurrencia de evento: 6

    Código de detalles de evento: 0

    Información de aplicación:

    Dominio de aplicación: /LM/W3SVC/1/Root/CrystalReportsWebServices-5-129762056966696816

    Nivel de confianza: Full

    Ruta de acceso virtual de la aplicación: /CrystalReportsWebServices

    Ruta de acceso de la aplicación: c:\inetpub\wwwroot\CrystalReportsWebServices\

    Nombre del equipo: VPS1

    Información de proceso:

    Id. de proceso: 5536

    Nombre de proceso: w3wp.exe

    Nombre de cuenta: NT AUTHORITY\SYSTEM

    Información de la excepción:

    Tipo de excepción: ConfigurationErrorsException

    Mensaje de la excepción: No se puede cargar el archivo o ensamblado 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' ni una de sus dependencias. El sistema no puede hallar el archivo especificado. (c:\inetpub\wwwroot\crystalreportswebservices\web.config line 22)

    Información de solicitud:

    Dirección URL solicitada: http://190.210.143.124/CrystalReportsWebServices/serverfilereportmanager.asmx

    Ruta de acceso de solicitud: /CrystalReportsWebServices/serverfilereportmanager.asmx

    Dirección de host de usuario: 190.31.31.216

    Usuario:

    Se autenticó: False

    Tipo de autenticación:

    Nombre de la cuenta de subproceso: NT AUTHORITY\SYSTEM

    Información de subproceso:

    Id. de subproceso: 6

    Nombre de la cuenta de subproceso: NT AUTHORITY\SYSTEM

    Está representando: False

    Seguimiento de la pila: en System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)

    en System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)

    en System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)

    en System.Web.Compilation.WebDirectoryBatchCompiler..ctor(VirtualDirectory vdir)

    en System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean ignoreErrors)

    en System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir, Boolean ignoreErrors)

    en System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)

    en System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)

    en System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)

    en System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)

    en System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath)

    en System.Web.UI.WebServiceParser.GetCompiledType(String inputFile, HttpContext context)

    en System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)

    en System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)

    en System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

    en System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

    Detalles de evento personalizado:

    Para obtener más información, vea el Centro de ayuda y soporte técnico en http://go.microsoft.com/fwlink/events.asp.

    miércoles, 14 de marzo de 2012 14:14

Todas las respuestas