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)
Modificare il ConnectionString per AdService nel mio web.config dalla mia classe la password?
Modificare ciò che utilizza AspNetActiveDirectoryMembershipProvider, quindi dalla mia classe Login è possibile utilizzarlo per utilizzare EMEA_ADService o PACIFIC_ADService come definito in web.config?
- È 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!;)
Non hai il DNS? – BlackICE
Sono * così * mi dispiace. Buona fortuna. – MikeTheLiar
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