2010-01-05 7 views
5

Ich habe Probleme mit Crystal Reports bei der Verwendung von Diagrammen und Bildern, die CrystalImageHandler.aspx verwenden. Das Bild kann nicht angezeigt werden und ich vermute, dass dies auf ein Problem mit dem MVC-Routing zurückzuführen ist.Crystal Reports Bilder und ASP.Net MVC

Der Weg Bildpfad zu diesem ähnlich ist:

src = "/ crystalimagehandler.aspx dynamic = cr_tmp_image_a8301f51-26de-4869-be9f-c3c9ad9cc85e.png?"

Mit der URL dies ähnlich zu:

localhost:/ViewCrystalReports.aspx id = 50

Das Bild kann vermutlich nicht gefunden werden, da es in einem nicht vorhandenen Verzeichnis gesucht wird. Wie kann ich den Pfad ändern, in dem sich CrystalImageHandler.aspx befindet? Ich denke, wenn ich von der Wurzel referenzieren würde, würde das Problem gelöst werden, aber irgendetwas, das ich in Web.Config ändere, funktioniert nicht.

ich soll dies erwähnen ist auf einer herkömmlichen aspx Seite, nicht eine Ansicht, etc

+1

Können Sie das Bild aus Code erstellen? Es kann einfacher sein, einfach eine Seite zu erstellen, die das Bild im Handler generiert und es als FileResult/StreamResult/WhateverResult zurückgibt. – Will

+0

Hallo Damien, dies könnte ein wenig vom Thema abweichen, aber wie war Ihre Erfahrung mit MVC mit Crystal Reports? Wir sind kurz davor, mit umfangreichen Berichten eine riesige Anwendung auf MVC zu erstellen. Halten Sie es für eine praktikable Lösung? haben Sie auch Berichte in Webforms (Seite an Seite mit MVC) oder gestreamte Berichte zur Laufzeit verwendet? – neebz

+0

Mögliches Duplikat von [CrystalImageHandler.aspx nicht gefunden] (http://stackoverflow.com/questions/11357854/crystalimagehandler-aspx-not-found) – bummi

Antwort

2

figured it out. Das Routing stört den CrystalImageHandler.aspx-Link, der generiert wurde. Global.aspx hat die folgende Zeile des Routing-Engine zu sagen, Ressource-Dateien zu ignorieren:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

aber dies ist keine konventionelle Ressource-Datei, es ist eine aspx-Datei aus irgendeinem Grunde (jemand, warum?)

Hinzufügen dieser es fest:

routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 
2
public class CrystalImageHandlerController : Controller 
{ 
    // 
    // GET: /Reports/CrystalImageHandler.aspx 

    public ActionResult Index() 
    { 
     return Content(""); 
    } 

    protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 

     var handler = new CrystalDecisions.Web.CrystalImageHandler(); 
     var app = (HttpApplication)filterContext.RequestContext.HttpContext.GetService(typeof(HttpApplication)); 
     if (app == null) return; 

     handler.ProcessRequest(app.Context); 

    } 
} 

Dieser Controller den Handler aufruft. Fügen Sie einfach eine Route als CrystalImageHandler.aspx hinzu, sie kann auch mit jedem beliebigen Unterpfad verwendet werden (in diesem Fall/Berichte). Etwas, das ich NIEMALS über die Konfiguration mit dem Handler erledigen konnte.

6

ich dieses Problem lösen Bearbeitung Web.Config Datei

Legen Sie die folgende Zeile ein:

<system.web> 
... 
<httpHandlers> 
    <add path="CrystalImageHandler.aspx" verb="GET" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"></add> 
</httpHandlers> 
... 

* Vorsicht bei der schreiben Sie Ihre Nummer Version (Version = xx.x.xxxx.x)

+0

Ich musste zwei weitere Dinge hinzufügen, um es zu machen. Ich habe irgendwie Crystal in mein Projekt aufgenommen und den httpHandler hinzugefügt, aber am Ende habe ich das folgende Bit hinzugefügt: 'preCondition =" integratedMode, runtimeVersionv4.0 " Ich änderte das in runtimeVersion2.0 Die andere Sache war der Ordner' C : \ inetpub \ wwwroot \ aspnet_client \ system_web' hatte einen Ordner für 2_0_50727 und ich kopierte seinen Inhalt in 4_0_30319 Ich nehme an, dass runtimeVersion2.0 auf die Tatsache verweist, dass CrystalDecisions.Web.CrystalImageHandler eine .Net 2-Assembly ist, während die Datei Der Ordner 4_0_30319 wird von ASP.NET 4.0 referenziert – erict

0

Um auf dem lokalen Computer anzuzeigen, fügen Sie den folgenden Code in der Webkonfiguration hinzu:

<httpHandlers> 
<add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" /> 
</httpHandlers> 

...............................

<appSettings>  
<add key="CrystalImageCleaner-AutoStart" value="true" /> 
<add key="CrystalImageCleaner-Sleep" value="60000" /> 
<add key="CrystalImageCleaner-Age" value="120000" />  
</appSettings> 

Der folgende Code für die Anzeige in Server

<system.webServer>  
<handlers>     
    <add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/> 
</handlers> 
</system.webServer> 

:) ich werde dieses Problem beim Hinzufügen in Config-Web löst

0

Es ist, weil das Routing mit der crystalimagehandler.aspx wurde zu stören.In der Datei Global.asax oder routeConfig können wir die Route für ASPX-Erweiterungsdateien ignorieren. Sie können die Erweiterung der ASPX-Route ignorieren, indem Sie die folgende Zeile hinzufügen.

routes.IgnoreRoute ("{allaspx}", neu {allaspx = @ ". .aspx (/.*)?"});