2012-01-30 14 views
9

stiamo scrivendo un'applicazione Silverlight multi-tenanted. L'utente accede utilizzando l'autenticazione Windows Form e noi tiriamo la stringa di connessione per quell'utente da una tabella. La stringa è della forma:Perché questa connessione al database fallisce quando "Nome applicazione = applicazione" è nella stringa di connessione?

Data Source=1.2.3.4; Initial Catalog=database; Persist Security Info=True; User ID=######; Password=########## 

Questo stava funzionando benissimo. Abbiamo quindi deciso che l'impostazione del nome dell'applicazione, per ragioni outlined here sarebbe una buona idea:

Data Source=1.2.3.4; Initial Catalog=database; Application Name=application; Persist Security Info=True; User ID=######; Password=########## 

Tuttavia, ora la connessione è non essere commesso errori così stiamo ottenendo. Questo sta fallendo solo sul sito distribuito. L'esecuzione tramite Visual Studio è apparentemente inalterata. Non sono state apportate modifiche al codice che effettua la connessione. Sono disposto a credere che ci dovrebbero essere dei cambiamenti, ma non sono stato in grado di capire cosa dovrebbero essere.

La connessione viene creato in questo modo:

public class OurDataContext : DataContext 
{ 
    public OurDataContext() 
     : base(SessionCache.OurConnectionString) 
    { 
     .... 
    } 
} 

SessionCache.OurConnectionString è la stringa letta dal database.

UPDATE

La modifica alla stringa di connessione può essere una falsa pista. Otteniamo questo errore solo su un server web (quello a cui non ho accesso diretto). Aggiunta la proprietà alla banca dati a cui fa riferimento un altro server web (che ho fare hanno accesso a) non riproduce il problema. Questo mi porta alla conclusione che l'errore è da qualche altra parte. Tuttavia, non sono ancora più vicino a risolvere questo.

L'errore effettivo è un'eccezione:

An exception of type 'System.ServiceModel.DomainServices.Client.DomainOperationException' occurred and was caught. 
------------------------------------------------------------------------------------------------------------------ 
01/31/2012 14:18:53 
Type : System.ServiceModel.DomainServices.Client.DomainOperationException, System.ServiceModel.DomainServices.Client, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
Message : Load operation failed for query 'GetUserSecurityConfig'. The remote server returned an error: NotFound. 
Status : ServerError 
ErrorCode : 0 
Data : System.Collections.ListDictionaryInternal 
Stack Trace : The stack trace is unavailable. 

Tutte le ricerche che ho fatto oggi su questo ritorna alcune cose piuttosto di base che non dovrebbe essere cambiato:

  • sistema. ComponentModel.DataAnnotations, System.ServiceModel.DomainServices.EntityFramework, System.ServiceModel.DomainServices.Hosting e System.ServiceModel.DomainServices.Server non essere copiati nella directory \ bin. Ho controllato e loro sono.
  • errori di connessione al server di database. Io non credo che questo è il caso, come le opere di autenticazione forme. È un database diverso sul server, ma le credenziali sono le stesse.
+0

Non sono un esperto di SQL server ma proverei a rimuovere la parte "persist security information" e vedere se aiuta un altro punto: la "domanda" contiene spazi o simili? – Yahia

+0

@Yahia - Nessun spazio in "applicazione". "Persist Security Info" deve essere true per recuperare nome utente e password [Source] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx) – ChrisF

+0

You ha configurato la "domanda" nel db distribuito? –

risposta

1

Il problema si è verificato a causa della versione di Servizi RIA installata sul server.

Abbiamo recentemente modificato i progetti per includere i servizi RIA tramite il gestore pacchetti NuGet e questo server ha già installato i servizi RIA per VS2010. Quando lo abbiamo risolto, tutto è tornato in vita.

Non è chiaro perché ci sia voluto così tanto tempo prima che questo problema si manifestasse.

0

Abbiamo solo questo errore su un server web (quello a cui non ho accesso diretto). L'aggiunta della proprietà al database a cui fa riferimento un altro server Web (a cui ho accesso) non riproduce il problema.

Controllare la configurazione del server Web e che il database sia installato correttamente.

si presenta come webserver config/db installion a me.

+0

Questa è la conclusione che stiamo arrivando anche noi. Tuttavia, non è ancora arrivato nulla. – ChrisF

+0

@ChrisF Controllare (e confrontare con il server web funzionante) quale database e schema si connette all'utente e il mapping dell'utente in SQL Server. Sembra che la connessione venga stabilita su un database che non ha GetUserSecurityConfig. Prova 'Initial Catalog = schema.database' per confermare dove si sta connettendo. – PhilW