2008-10-01 4 views
1

Je suis en train de faire ce qui suit:clients distants ne peuvent pas le fichier XLS ouvert à l'aide ASP.NET/ADO

  1. utilisateur va à la page Web, le téléchargement fichier XLS
  2. utiliser ADO .NET pour ouvrir Fichier XLS utilisant la connexion du moteur JET au fichier téléchargé localement sur le serveur Web

Ceci fonctionne très bien localement (mon ordinateur en tant que client et serveur web) - et fonctionne en fait sur le serveur web du client avec des clients distants mais ne fonctionne pas lorsque vous essayez de tester en interne en utilisant un client distant.

L'erreur que je reçois est:

TIME:  [10/1/2008 11:15:28 AM] 
SEVERITY: EXCEPTION 
PROGRAM: Microsoft JET Database Engine 
EXCEPTION: Unspecified error 
STACK TRACE:  at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 
    at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.OleDb.OleDbConnection.Open() 

Le code génère l'erreur est:

OleDbConnection l_DbConnection; 
     OleDbDataAdapter l_DbCommand; 
     DataSet l_dataSet = new DataSet(); 

     l_DbConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\"" + l_importFileName + "\";Extended Properties=Excel 8.0;"); 
     l_DbCommand = new OleDbDataAdapter("select * from [Sheet1$]", l_DbConnection); 

     //try using provider to read file 
     try { l_DbConnection.Open(); } 

L'appel à "ouvrir" Raising l'exception ci-dessus.

Le site utilise l'usurpation d'identité et tous les appels sont effectués en tant qu'utilisateur connecté sur le client. Ce que j'ai fait jusqu'à présent pour essayer de le faire fonctionner:

J'ai suivi les étapes ici http://support.microsoft.com/kb/251254/ et j'ai attribué des permissions au répertoire de la variable d'environnement TMP/TEMP à l'utilisateur que j'utilise pour tester (aussi des permissions assignées à ASPNET puis à "Tout le monde" comme une couverture "est-ce lié à ces autorisations?" test).

Garantit que le fichier est en cours de chargement et que le fichier XLS lui-même a hérité des autorisations de répertoire qui permettent à l'utilisateur un accès complet au fichier. J'ai également donné ce dir autorisations à "Tout le monde" juste au cas où - cela n'a pas aidé.

Je n'ai pas eu à modifier de variables d'environnement et, par conséquent, je n'ai pas redémarré après avoir apporté ces modifications - mais je ne devrais pas avoir besoin des autorisations de dossier/fichier Windows pour prendre effet.

À ce stade, je suis à une perte totale

Répondre

2

Ok, tout compris -

se révèle que même avec IIS en utilisant l'usurpation d'identité et les variables d'environnement TMP/TEMP étant réglé sur C: \ WINDOWS \ Temp le processus ASP.NET est toujours en cours d'exécution sous le compte ASPNET et chaque utilisateur individuel a besoin d'autorisations dans le dossier Documents and Settings \ ASPNET \ Local Settings \ Temp

L'autre façon de procéder serait probablement de créer une nouvelle application pool et que ce pool d'applications s'exécute en tant qu'utilisateur avec des autorisations sur le bon dossier plutôt que sur ASPNET

0

Allez dans le répertoire \ Documents and Settings \ "machineName" \ ASPNET \ Local Settings \ Temp et donner lecture, écriture des droits à l'utilisateur "Everyone" Ensuite, il fonctionnera très bien. En outre, vous devez définir "" dans le fichier web.config

Questions connexes