2010-06-18 4 views
1

Je développe un service Web qui accède à une base de données SQL Express, il fonctionne très bien dans l'hôte Visual Studio mais lorsque je le déploie sur IIS 7.5, j'obtiens cette exception.SQL Express sous IIS 7.5

S'il vous plaît aidez-moi.

Stack Trace:

System.Data.EntityException: The underlying provider failed on Open. ---> System.Data.SqlClient.SqlException: Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. Please make sure the user has a local user profile on the computer. The connection will be closed. 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 
    at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) 
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) 
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    --- End of inner exception stack trace --- 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 
    at System.Data.EntityClient.EntityConnection.Open() 
    at System.Data.Objects.ObjectContext.EnsureConnection() 
    at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() 
    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) 
    at WSCinema.CinemaService.Movie() in D:\Documents\My Dropbox\Projects\sd.v0910\trab3\code\WSCinema\CinemaService.asmx.cs:line 46 

Répondre

2

Le compte que votre pool d'applications de l'application dans IIS est en cours d'exécution en fonction des besoins d'accès en écriture au dossier App_Data où votre fichier de base de données (mdf) est stocké. Par exemple. Si le pool d'applications est configuré pour s'exécuter en tant que service réseau, accordez des autorisations à ce compte dans le dossier App_Data.

Lorsque vous exécutez l'hôte VS, votre application est en cours d'exécution en tant que votre compte d'utilisateur qui a accès à App_Data.

+0

a marqué votre question cause résolu mon problème. ty =) – fampinheiro

1

Vous utilisez RANU, les instances d'utilisateur SQL Express. Voir plus de détails à leur sujet au SQL Server 2005 Express Edition User Instances. RANU crée une nouvelle instance pour chaque utilisateur se connectant à l'instance SQL Express d'origine et la nouvelle instance d'utilisateur s'exécute sous les informations d'identification de l'utilisateur. Dans ce cas, il va créer une instance d'utilisateur sous l'identité ASP AppPool, et d'essayer de créer cette instance utilisateur frappe l'erreur:

Failed to generate a user instance of SQL Server due to failure in retrieving the user's local application data path. Please make sure the user has a local user profile on the computer.

Donc, si vous insistez sur l'utilisation des instances de l'utilisateur, assurez-vous que l'identité du pool d'application a un profil sur l'hôte IIS. Mais ce serait beaucoup plus bénéfique et plus facile si vous abandonnez les instances d'utilisateurs, utilisez simplement l'instance SQL Express directement.

+0

je vous remercie pour votre question, up vote pour vous, ce fut juste pour un petit travail scolaire, je vais abandonner les instances d'utilisateur dans mes prochains projets =) – fampinheiro

+0

typ0: réponse non question xD – fampinheiro

Questions connexes