2016-04-04 30 views
5

Ho un attore che dopo aver ricevuto una richiesta da un progetto WebAPI, l'attore interroga una tabella utilizzando Entity Framework 6.Utilizzando LocalDB con Service Fabric

using (var context = new MetadataContext()) 
{ 
    var userStorageAccountId = context.Set<UsersToStorageAccounts>() 
             .Find(userId).StorageAccountId; 
} 

Il DB è stata con successo creata usando "Add-migrazione ".. 'Update-Database' comandi, e ha la seguente stringa di connessione:

@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFileName=C:\Users\xxxx\Metadata.mdf;Connect Timeout=30;Initial Catalog=Metadata;Integrated Security=True;" 

quando faccio funzionare il servizio di tessuto e l'attore cerca di accedere al contesto, ottengo la seguente eccezione:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

e l'errore di Visualizzatore eventi è:

Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

ho cercato un modo per caricare il profilo dell'utente, ma ho trovato solo soluzioni per IIS.

Si prega di aiutare :)

+1

L'intero scopo dell'utilizzo di Service Fabric è una facile implementazione senza preoccuparsi del server. LocalDB (un database in-process che memorizza i dati localmente) significa che vuoi realmente * modificare * il server e legarti ad esso, dato che non sarai in grado di spostarti su un altro computer senza perdere i tuoi dati. Inoltre, il codice utilizza un percorso DB che punta a una cartella utente specifica –

+4

@PanagiotisKanavos Il LocalDB viene utilizzato solo per il debug. Se il fabric di servizio viene eseguito in un ambiente di sviluppo, viene utilizzato LocalDB e, se viene eseguito in prod, viene utilizzato un server mssql db. Non riesco a farlo funzionare localmente, a scopo di debug. – shlatchz

+1

Non usarlo allora. Service Fabric * non eseguirà * sotto il tuo account nemmeno localmente, quindi * non * può accedere alla tua directory utente. In effetti, l'errore suggerisce che Service Fabric viene eseguito con un account che non consente il caricamento del profilo, ovvero che non ha alcun profilo ovvero nessuna directory utente. * Perché * utilizzare LocalDB affatto, invece di un'installazione locale di SQL Server?Dev edition è gratuito –

risposta

12

Come servizio viene eseguito in tessuto con un altro utente, è necessario condividere il database e dare le NETWORK SERVICE permesso:

  1. Con la quota di riga di comando SqlLocalDB.exe vostra connessione questo comando:

    sqllocaldb share MSSqlLocalDB SharedDB 
    
  2. Aprire il LocalDB con SQL Server Management Studio e andare alle /sicurezza/account di accesso, aggiungere l'account locale NETWORK SERVICE ed in Mapping utenti aggiungerlo come dbo (dbo.dbowner) al database

  3. Utilizzare il nome condiviso nella stringa di connessione in questo modo:

    "Data Source=(localdb)\.\SharedDB;Initial Catalog=[YOUR DB];Integrated Security=SSPI;" 
    

Modifica Ecco una sceneggiatura che ho aggiunto ai miei progetti, cambiare databasename con il nome del db:

sqllocaldb create MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 
sqllocaldb share mssqllocaldb sharedlocal 
sqllocaldb stop MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 

"c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S "(localdb)\.\sharedlocal" -d "databasename" -Q"create login [nt authority\network service] FROM windows with DEFAULT_DATABASE=databasename;use databasename;exec sp_addrolemember 'db_owner', 'nt authority\network service';" 
+0

Funziona per me. ad eccezione della mia stringa di connessione è 'Data Source = (LocalDb) \. \ SharedDB; Initial Catalog = [YOUR DB]; Integrated Security = True'. Grazie! – tsu1980

+0

Ho anche dovuto interrompere/avviare l'istanza di localdb affinché la condivisione abbia effetto. – JohnnyFun

-2

Per quanto riguarda IIS in tessuto di servizio, ho pensato che non è possibile ospitare un'applicazione ASP.NET tessuto del servizio in IIS. Ecco perché quando si crea stateless progetto ASP.NET SF, l'hosting di default è Owin

+1

L'errore che ho ricevuto non è a conoscenza del fatto che provo a eseguire LocalDB con Service Fabric, quindi il suo suggerimento non implica che SF funzioni con IIS. – shlatchz

+0

La domanda non implica da nessuna parte che sta usando o vuole usare IIS. Il problema che stanno avendo è quando eseguono il cluster di Service Fabric sul loro computer di sviluppo che hanno problemi a connettersi a un database ospitato sulla stessa macchina. –

Problemi correlati