L'invio della stringa di connessione al servizio non sarebbe una buona idea. Il chiamante non dovrebbe avere alcuna idea se c'è un database o un milione (a meno che non si stia creando qualcosa di veramente strano, come un front-end del database, sulla falsariga di phpMyAdmin).
Sul lato Entity Framework delle cose, è possibile modificare la connessione quando viene creato il contesto. Quindi, ad esempio:
public class EFContext : DbContext
{
public EntityFrameworkSession()
: base(DetermineConnection(), true)
{
}
private static DbConnection DetermineConnection()
{
// create an ADO.NET connection here based on your criteria
}
}
Quale lascerebbe aperta la connessione su come memorizzare / recuperare la connessione. Ci sono alcuni modi per gestirlo, iniziando dal modo più semplice (memorizzare più stringhe di connessione nel tuo web.config e tirare quello che si applica all'utente corrente) a metodi più sofisticati (come mettere tutte le tue stringhe di connessione in un database crittografato ).
Essendo il tipo paranoico, sarei più propenso a fare quest'ultimo.
Il metodo che ha senso per l'autenticazione di un utente (e, quindi, avere le informazioni per determinare quale connessione al database utilizzare) dipende in gran parte dalla configurazione. Alcuni buoni collegamenti sull'impostazione di WCF includono:
- link
- link
Dato che stai usando WCF, userei Active Directory se è del tutto fattibile. L'autenticazione di Windows tende a giocare molto bene con la sicurezza .NET.