2016-04-21 11 views
5

Ich verwende Visual Studio 2010 mit Crystal Report. Es funktioniert gut in meinem lokalen Server aber auf Webserver gibt es Fehler: System.Runtime.InteropServices.COMException: Invalid file name.

Ich habe versucht, viele Lösungen wie .rpt Datei in einem beliebigen Ordner speichern und diesen Weg zur Verfügung stellen, die volle Berechtigung zu Windows-Temp-Ordner geben, übergeordneten Pfad Form ermöglichen IIS usw.

Aber keiner von ihnen arbeitet. Bitte hilf mir, das zu lösen.

Mein aktueller Pfad:System.Runtime.InteropServices.COMException: Ungültiger Dateiname in Crystal Report

crystalReport.Load(Server.MapPath("~/PurchaseOrder1.rpt")); 


Crystal Report error

+0

Was bedeutet Server.MapPath ("~/PurchaseOrder1.rpt") zurückkehren zurückkehren? Ist es der richtige Ort für die Datei? Haben Sie IIS_IUSERS auch Zugriff auf die Datei über NTFS gegeben? – JAZ

+0

@ John, Server.MapPath ist korrekt, auf dem lokalen Server funktioniert es einwandfrei. Lassen Sie mich nach der IIS_IUSERS-Berechtigung suchen. –

+0

Derselbe Fehler, auch nachdem ich die IIS_IUSERS-Berechtigung erhalten habe. –

Antwort

2

nicht eine ganze Antwort, aber ich bin zu neu zu SO Kommentar nur zu. Eine Sache, die Sie versuchen könnten, ist Process Monitor herunterladen und sehen, wo Crystal versucht, die Datei zu laden und das kann helfen. Process Monitor wird eine große Menge an Output liefern, aber das kann gefiltert werden, zum Beispiel ein Teil des Dateinamens. Es kann Ihnen sagen, ob es auch ein Berechtigungsproblem gibt. Ich finde es sehr nützlich für diese Art von Situationen, in denen Sie nicht herausfinden können, warum eine Datei nicht gefunden wird.

0

Meine Vermutung ist, dass der Täter eine / auf dem Webserver-Pfad sein kann.

Versuchen Sie es mit Path.Combine(Server.MapPath("~"), "PurchaseOrder1.rpt");

Dies sollte geeigneten / in den Weg stellen und könnte das Problem beheben.

+0

Ich habe das versucht und immer noch denselben Fehler. –

0

Ich denke, dass der Hauptunterschied zur lokalen und Serverumgebung der IIS-Stamm und das virtuelle Verzeichnis ist, in dem sich Ihre Anwendung befindet.

Ich meine, wenn die Datei im Stammverzeichnis der Website ist, möchten Sie vielleicht

crystalReport.Load(Server.MapPath("/PurchaseOrder1.rpt"));

verwenden, oder Sie können versuchen, die RPT-Datei in denselben Ordner mit ViewPurchaseOrder.aspx setzen, ohne den Code zu ändern

Wenn es nicht funktioniert, wenn Sie Pfade (sowohl physisch als auch virtuell) teilen könnten, können wir weiter überprüfen.

* Bearbeiten: Bei Verwendung von Server.MapPath

/ kehrt Site-Stamm

~/ kehrt Stammverzeichnis der Anwendung

Der Unterschied besteht darin, dass, wenn Ihre Website ist:

http://yoursite.com Und Sie haben eine Anwendung, die

auf wwwroot\somedir\app ist

Also in Ihrer "App" (http://yoursite.com/somedir/app)

/sollte die Wurzel der Site (http://yoursite.com) zurückkehren

~/sollte die Wurzel der Anwendung (http://yoursite.com/somedir/)