Frage

Hintergrund

Wir entwickeln einige in-house-Dienstprogramme mit ASP.NET 2.0. Eines davon ist einige Informationen aus Datenbanken zu extrahieren und den Aufbau einer Excel-Arbeitsmappe eine Reihe von Tabellen mit Daten basierend auf Abfragen in der Datenbank enthalten.

Problem

Der Proof-of-concept-Prototyp (eine einfache ASP.NET-Seite, die ein einzelnes Element aus der Datenbank abfragt und öffnet Excel-Daten zu einem Arbeitsblatt hinzufügen) funktioniert gut, wenn sie lokal auf der Entwicklung Maschinen läuft, glücklich Erstellen und Anzeigen von eine Excel-Tabelle, wie verlangt. Wenn jedoch auf unserem Server läuft, wir die folgende Fehlermeldung beim Versuch Excel zu instanziiert.

Nicht imstande, COM-Objekt des Typs ‚Microsoft.Office.Interop.Excel.ApplicationClass‘ Schnittstelle Typ ‚Microsoft.Office.Interop.Excel._Application‘ zu werfen. Dieser Vorgang fehlgeschlagen, da der Interface-Aufruf auf der COM-Komponente für die Schnittstelle mit IID ‚{000208D5-0000-0000-C000-000000000046}‘ aufgrund der folgenden Fehler fehlgeschlagen: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)) .

Lösung?

Wir sind mit dem PIA für Excel 2003 und wir haben Excel 2003 und die PIA auf dem Server installiert. Kann mir jemand erklären, warum dies nicht funktioniert oder geben Sie uns einige Tipps, wie wir das Problem nach unten verfolgen könnte?

Vielen Dank für jede Hilfe, die Sie anbieten können.

War es hilfreich?

Lösung

Kann der Benutzer, dass die ASP.NET-Anwendung Pool unter Zugriff läuft muss die Anwendung? Versuchen Sie als dieser Benutzer anmelden (oder Anwendungspool ändern als dieser Benutzer ausgeführt werden) und Öffnen Excel. Wenn das funktioniert versuchen, eine WinForms-Anwendung als dieser Benutzer mit dem Code auf dem Server ausgeführt, die fehlschlägt.

Nicht sicher, aber ich denke, die PIA-Baugruppen können über regsvr32 registriert werden müssen.

Ich vermute, dass, wenn Sie als Netzwerkdienst ausführen, werden Sie nicht in der Lage sein, Excel (keine interaktive Anmeldung, beschränkte Konto, usw.) zu starten. ASP.NET-Code ausgeführt wird innerhalb des Anwendungspools. Sie können die Benutzer ändern der Anwendungspool als über den IIS-Manager ausgeführt wird. Wenn Sie möchten, um zu überprüfen, was Ihr Code zur Zeit als Blick in den Task-Manager für den w3wp Prozess ausgeführt wird.

Zum Testen des Application Pool ändern, wenn der Benutzer ausführen Sie arbeiten mit Excel kennen.

Andere Tipps

Wir verwenden Aspose (kommerziell). Office auf einem Server ist nicht viel Spaß.

  • Sie haben über die Lizenzierung vorsichtig sein.
  • Einmal in einer Weile benötigen Sie einen hängenden Prozess zu töten.
  • Getting die Rechte Recht dauert einige Mühe.

Es ist PI (t) A für einen Grund ...

Betrachten Sie mit XLSX-Dateien arbeiten (neu in Office 2007, aber es ist ein Plugin für Office 2003), die nur ZIP-Dateien sind XML-Dateien enthält, die Sie ohne die Notwendigkeit für Excel bearbeiten können. Die (XML-basiert) SpreadsheetML ist gut dokumentiert und nicht zu kompliziert programmieren gegen (man könnte sogar eine LINQ findet irgendwo im Internet SpreadsheetML).

Wie oben erwähnt, Excel ist nicht wirklich ein Serverprodukt und Sie könnten in alle Arten von Problemen führen, wenn es auf einem Server verwendet wird.

ich glaube, das Problem ist, dass, wenn Sie Ihre Anwendung auf IIS bereitstellen Sie plötzlich innerhalb einer MTA COM Wohnung ausgeführt werden. Ich glaube, dass Excel eine STA-Komponente und kann daher nicht innerhalb des MTA erstellt werden. Sie müssen die AspCompat Option in der Seite setzen Sie mit

<%@ page aspcompat=true %>

Mehr Infos hier

Microsoft , (Hervorhebung im Original-Quelle):

  

Microsoft derzeit nicht empfehlen, und nicht unterstützt, Automatisierung von Microsoft Office-Anwendungen von jedem unbeaufsichtigt, nicht-interaktiven Client-Anwendung oder eine Komponente (einschließlich ASP, ASP.NET, DCOM und NT-Diensten), da Office kann ein instabiles Verhalten aufweisen und / oder Deadlock, wenn Office in dieser Umgebung ausgeführt wird.

Mit einer Liste von Gründen, warum sollten Sie es nicht tun:

  
      
  • ... Viele Dienste unter Konten ausgeführt werden, die keine Benutzerprofile (wie das Systemkonto oder die IWAM_ [servername] Konten) haben. Daher initialisieren Amt möglicherweise nicht richtig auf Start. In dieser Situation gibt Amt einen Fehler auf der Funktion Create oder die CoCreateInstance Funktion. Auch wenn die Office-Anwendung gestartet werden kann, können andere Funktionen möglicherweise nicht richtig funktionieren, wenn kein Benutzerprofil vorhanden ist.
  •   
  • Wenn ein unerwarteter Fehler auftritt, oder wenn eine nicht spezifizierte Parameter benötigt wird, um eine Funktion zu vervollständigen, wird Amt, die den Benutzer mit einem modalen Dialogfeld aufgefordert, die den Benutzer fragt, was der Benutzer tun möchte. Ein modales Dialogfeld auf einer nicht-interaktive Desktop kann nicht entlassen werden. Daher stoppt das Gewinde (Hänge) auf unbestimmte Zeit zu reagieren. Obwohl bestimmte Codierungsverfahren können helfen, die Wahrscheinlichkeit dieses Problems zu verringern, können diese Praktiken das Problem nicht vollständig verhindern. Diese Tatsache allein macht Office-Anwendungen von einer serverseitigen Umgebung riskant und nicht unterstützt ausgeführt wird.
  •   
  • Serverseitige Komponenten müssen sehr einspringenden, multi-threaded COM-Komponenten sein, die minimalen Aufwand und hohen Durchsatz für mehrere Kunden. Office-Anwendungen sind in fast alle genau das Gegenteil respektieren. Office-Anwendungen sind nichtablaufinvarianten, STA-based Automation Server, die unterschiedliche, aber ressourcenintensive Funktionen für einen einzelnen Client sind entworfen, um.
  •   

Und Ihr Code könnte die folgenden Fehler werfen:

  • CoCreateInstance

    • Laufzeitfehler '429': ActiveX-Komponente kann Objekt nicht erstellen
    • Laufzeitfehler '70': Zugriff verweigert
    • CO_E_SERVER_EXEC_FAILURE (0x80080005): Server-Ausführung fehlgeschlagen
    • E_ACCESSDENIED (0x80070005): Zugriff verweigert
    • hängt
    • kehrt ohne Fehler, aber hat nicht funktioniert

Und schließlich:

  

Aufgrund der Einschränkungen für Office Design, Änderungen an Office-Konfiguration sind nicht genug, um alle Probleme zu lösen. Microsoft empfiehlt dringend, eine Reihe von Alternativen, die Server-Seite installiert werden nicht Amt verlangen, und das kann führen am häufigsten Aufgaben effizienter und schneller als Automation. , bevor Sie Office als serverseitige beinhalten Komponente in Ihrem Projekt, nach Alternativen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top