Récemment déployé mon application Web sur Windows Server 2008, IIS7 (avec Office installé).Comment faire pour exceler Interop sur Windows 2008?
Après avoir chassé (& attraper) diverses autres erreurs, je fais face à un je ne sais pas par où commencer. Sur Cassini (serveur visuel de développement de studio) tout fonctionnait parfaitement (lecture excel à travers excel interop).
Sur W2008 IIS il jette une erreur vague:
Value cannot be null. Parameter name: o
[ArgumentNullException: Value cannot be null. Parameter name: o] System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Object o) +9430474 longnamespace.ExcelReader.Dispose() in c:\longpath\ExcelReader.cs:23 longnamespace.ApplicationFormReader.Read(String path) in c:\longpath\ApplicationFormReader.cs:32
Actuellement, je vais ajouter chèque nul et voir si les choses vont mieux, mais je ne soupçonne qu'il souffle juste et dispose sur finally
bloc avant il commence même à lire n'importe quoi.
Essayé de définir le pool d'applications à exécuter sous le système local, mais cela n'a rien changé.
Des idées?
Voici comment la méthode Éliminez ressemble
//http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c/159419#159419
public void Dispose(){
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(_ws); //Worksheet, line 23
_wb.Close();
Marshal.FinalReleaseComObject(_wb); //Workbook
_ap.Quit();
Marshal.FinalReleaseComObject(_ap); //Application
}
Je crois que cet événement est lié
The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {00024500-0000-0000-C000-000000000046} to the user NT AUTHORITY\NETWORK SERVICE SID (S-1-5-20) from address LocalHost (Using LRPC). This security permission can be modified using the Component Services administrative tool.
Si oui - tout le monde pourrait se traduire?
Ajout de droit pour Microsoft Excel Application
à Network service
dans les services de composants en quelque sorte ne fonctionnait pas. genre a.
La suppression du niveau d'authentification n'a pas aidé non plus.
Changé à
if (_ws != null)
Marshal.FinalReleaseComObject(_ws);
if (_wb != null)
{
_wb.Close();
Marshal.FinalReleaseComObject(_wb);
}
if (_ap != null)
{
_ap.Quit();
Marshal.FinalReleaseComObject(_ap);
}
nous allons voir comment ça se passe ...
Chose étrange est - pourquoi il est nul s'il n'a jamais été avant le déploiement sur IIS? :/ –
Commuté à un utilisateur particulier comme une identité dans les paramètres dcom et il a finalement travaillé. Dieu que je suis fatigué ... Toute la journée à lutter contre les problèmes de bullc ** p comme celui-ci. Il est temps de rentrer à la maison. Et merci pour votre temps. –
"Chose étrange est - pourquoi il est nul s'il n'a jamais été avant le déploiement sur IIS?" - probablement parce que l'autre code qui n'a pas été posté instancie avec succès l'objet _ap avant de le déployer sur IIS. – Joe