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.
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
@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
You ha configurato la "domanda" nel db distribuito? –