2013-01-24 5 views
7

Primo post, sono un novizio completo .Net/C# gettato alla fine!È possibile modificare il valore di configurazione ConnectionString in fase di esecuzione? O ... ho anche bisogno di?

Ho ereditato un'applicazione C# wed a causa del fatto che qualcuno andava al lavoro e io ero l'unico con larghezza di banda! Ma non la conoscenza di .Net, C#!

L'app viene utilizzata da persone in diversi siti in tutto il mondo. Eseguono l'accesso utilizzando i dettagli di accesso aziendali e come tali accedono a server diversi a seconda di dove si trovano (Europa, America o India).

Il tizio che ha scritto l'app non è riuscito a capire come passare ConnectionString in web.config in base alla posizione, quindi ha duplicato l'intera app per ciascun dominio! Con la sola variazione è un singolo indirizzo IP in web.config per ogni versione duplicata dell'app! Poi ha fatto una semplice prima pagina web che ha portato l'utente alla "loro" versione dell'app a seconda di dove dicevano di essere nel mondo!

La prima cosa che voglio fare è passare a una versione singola da mantenere, quindi devo essere in grado di cambiare la stringa di connessione o come accedere?

Ho trascorso diversi giorni cercando di capire come ottenere ConnectionString (definito in web.config) dalla mia classe Login, solo per scoprire che i valori impostati in web.config sembrano essere di sola lettura, quindi posso li altera.

Quindi immagino che la prima domanda sia: sto abbaiando dall'albero sbagliato? Posso semplicemente impostare tutte le informazioni richieste da AspNetActiveDirectoryMembershipProvider (vedi codice più avanti) e richiamarle dalla mia classe di accesso? O il ConnectionString instrada il modo Ipso per configurare le connessioni in .Net/C#? Quindi per questo ho bisogno di scoprire come cambiare/specificare/aggiungere il valore in fase di esecuzione.

Tre possibilità mi viene in mente: - (La prima è quella che ho a terra per un Hult con)

  1. Modificare il ConnectionString per AdService nel mio web.config dalla mia classe la password?

  2. Modificare ciò che utilizza AspNetActiveDirectoryMembershipProvider, quindi dalla mia classe Login è possibile utilizzarlo per utilizzare EMEA_ADService o PACIFIC_ADService come definito in web.config?

  3. È possibile definire una nuova connectionString e chiamare AspNetActiveDirectoryMembershipProvider tutto dalla mia classe Login, non utilizzando web.config per questa connessione?

ecco un po 'della mia suo file/web.config e la mia classe di login

Talee da web.config

<connectionStrings> 
    <add name="ADService" connectionString="LDAP://12.345.67.8" />   *---- Original ConnectionString (IP address changed)----* 
    <add name="EMEA_ADService" connectionString="LDAP://12.345.67.8" />  *---- Added by me playing around unsuccessfully! ----* 
    <add name="PACIFIC_ADService" connectionString="LDAP://12.345.67.9" /> *---- Added by me playing around unsuccessfully! ----* 
    ~ 
    </connectionStrings> 

<authentication mode="Forms"> 
     <forms loginUrl="~/Login.aspx" timeout="2880" />  *---- The background class for this popup (Login.aspx.cs) is where I'm currently trying to affect ConnectionString----* 
    </authentication> 
                  *---- Pretty sure this is the bit that actually does the login verification----* 
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider"> 
     <providers> 
     <clear /> 
     <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,   System.Web, Version=4.0.0.0, Culture=neutral,   PublicKeyToken=12345678" connectionStringName="ADService" applicationName="/." description="ADService" /> 
     </providers> 
    </membership> 

Questo è quanto ho nel mio classe prima di scoprire che non riesco a modificare ConnectionString!

Talee da Login.aspx.cs

public partial class Login : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings; //this is now working :) 
     string userDomain = Environment.UserDomainName; //Probably don't need this, it seems to give the login domain on the machine. Don't know yet if that will be the users machine or the server the app runs on? 
     if (connections.Count != 0) 
     { 
      foreach (ConnectionStringSettings connection in connections) 
      { 
       string testname = connections["ADService"].Name; 
       string testConnectionString = connections["ADService"].ConnectionString; 
       connections["ADService"].ConnectionString = "LDAP://12.345.67.9"; 
       testConnectionString = connections["ADService"].ConnectionString; 

Qualsiasi suggerimento sarebbe molto gradito!

P.S. Ho richiesto un corso .Net/C# al lavoro!;)

+0

Non hai il DNS? – BlackICE

+0

Sono * così * mi dispiace. Buona fortuna. – MikeTheLiar

+0

Puoi assemblare un nome al volo, quindi se riesci a determinare dove ti trovi, ad es. "Pacific", quindi puoi usare 'Connections [location + '_ADService']' per ottenere la giusta stringa di connessione. – HABO

risposta

5

Non si desidera modificare la stringa di connessione esistente. Piuttosto, dovresti modificare la stringa di connessione utilizzata dal tuo Data Access Layer per chiamare diversi stack di servizi. È quindi possibile scegliere una stringa di connessione in fase di esecuzione in base ai parametri di input che si desidera utilizzare. che nel tuo caso potrebbe essere un intervallo IP.

asp.net mvc multiple connection strings

Handling multiple connection strings in ONE DataAccess Layer

http://msdn.microsoft.com/en-us/library/aa479086.aspx

Microsoft articolo è particolarmente interessante in quanto ci vuole in realtà un aspetto architettonico a modelli adeguati per risolvere i dilemmi come la tua. Penso che sei rimasto bloccato con la parte più corta del bastone! Buona fortuna!

+0

Grazie per l'aiuto. Suppongo che la risposta sia che devo andare via e imparare alcune cose su .NET e C# prima! :) Quindi il cambiamento dovrà tornare indietro nel backlog finché non avrò almeno una vaga idea di come fare, cosa voglio fare, in questo ambiente! lol – user2008415

+0

@ user2008415 Prego! Hai a che fare con alcune cose impegnative fin da subito e spero che trovi tutte le risposte che stai cercando! Buona fortuna e grazie per aver accettato la mia risposta. –

0

Web.config non può essere modificato in fase di runtime. Suggerisco di impostare una sorta di bandiera tramite un collegamento di accesso o una casella combinata sul sito Web affinché le persone possano scegliere dove effettuare il login. Non è compito del server capire cosa vuole fare un utente.

Problemi correlati