2013-01-24 14 views
7

İlk gönderi, ben derin sonunda atılmış bir tam. Net/C# acemi değilim!ConnectionString yapılandırma değerini çalışma zamanında değiştirebilir misiniz? Yoksa buna ihtiyacım var mı?

İşten ayrılan birisi ve bant genişliği olan tek kişi olması nedeniyle bir C# wed uygulamasını miras aldım! Ama değil. Net, C# bilgisi!

Uygulama, dünyanın farklı yerlerinde bulunan insanlar tarafından kullanılıyor. Kurumsal giriş bilgilerini kullanarak giriş yaparlar ve bulundukları yere (Avrupa, Amerika veya Hindistan) bağlı olarak farklı sunucularda oturum açarlar.

Uygulamayı yazan kişi, yere bağlı olarak ConnectionString'i web.config'te nasıl değiştirebileceğiyle ilgili çalışma yapamadı, böylece her alan için tüm uygulama çoğaltıldı! Uygulamanın her çoğaltılmış sürümü için web.config içinde tek bir IP adresi olmak tek varyasyon ile! Daha sonra, kullanıcının dünyanın neresinde olduklarını söyledikleri yere bağlı olarak uygulamanın "kendi" sürümüne götüren basit bir web sayfası hazırladı!

Yapmak istediğim ilk şey, korumak için tek bir sürüme geçmek, bu yüzden bağlantı dizesini değiştirebilmem veya nasıl giriş yapılabileceğim?

Birkaç kez web sitemdeki ConnectionString'e (web.config dosyasında tanımlı) nasıl ulaştığımı araştırmaya çalıştım, sadece web.config dosyasında ayarlanan değerleri yalnızca okumak için okudum. Onları değiştirmeyin.

Yani ilk soru şu ki, yanlış ağacı havlıyor muyum? AspNetActiveDirectoryMembershipProvider'ın (daha sonra şifreye bakınız) gerektirdiği tüm bilgileri girip oturum sınıfımdan arayabilir miyim? Ya da ConnectionString rotası, Ipso'nun .Net/C# bağlantılarını kurmak için fiili yoludur. Bu nedenle, çalışma zamanında değeri nasıl değiştireceğimi/belirteceğimi/eklemeyi öğrenmem gerekiyor. Aklıma

Üç olasılık: -

  1. Değişim benim Girişi sınıfından benim web.config'de AdService için ConnectionString (ilk ben bir Hult'ta zemin ettik biridir)?

  2. AspNetActiveDirectoryMembershipProvider'ın ne kullandığını değiştirin, bu yüzden Giriş sınıfımdan, web.config dosyasında tanımlandığı şekilde EMEA_ADService veya PACIFIC_ADService'i kullanmaya başlayın.

  3. Yeni bir connectionString tanımlamak ve AspNetActiveDirectoryMembershipProvider'ı tümüyle benim oturum sınıfımdan aramak mümkün mü? Bu bağlantı için web.config kullanmıyor musunuz? İşte

Bunun içinde var olduğu kadar uzak olduğunu 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> 

bir benim/onun web.config dosyasının bitin ve benim Girişi sınıfının

Çelikler var benim ConnectionString değiştirmek mümkün görünmüyor bulmadan önce sınıf!

Çelikler 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; 

gelen herhangi bir ipucu çok hoş olurdu!

P.S. İş yerinde bir .NET/C# dersi talep ettim!;)

+0

DNS'iniz yok mu? – BlackICE

+0

Ben * üzgünüm * üzgünüm. İyi şanslar. – MikeTheLiar

+0

Anında bir isim oluşturabilir, böylece nerede olduğunuzu belirleyebilirseniz, ör. "Pasifik", sonra doğru bağlantı dizesini elde etmek için 'Bağlantılar [location +' _ADService '] 'kullanabilirsiniz. – HABO

cevap

5

Varolan bağlantı dizesini değiştirmek istemezsiniz. Bunun yerine, Veri Erişim Katmanı'nızın farklı servis yığınlarını aramak için hangi bağlantı dizesini kullandığını değiştirmek istersiniz. Ardından, kullanmak istediğiniz giriş parametrelerini temel alarak çalışma zamanında bir bağlantı dizesi seçebilirsiniz. Sizin durumunuzda bir IP aralığı olabilir. aslında sizin gibi ikilemler çözümlenmesi için doğru desenlere bir mimari bakış atıyor beri

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

Handling multiple connection strings in ONE DataAccess Layer microsoft makale

asp.net mvc multiple connection strings

özellikle ilginçtir. Sanırım sopanın kısa ucunda sıkışmışsın! İyi şanslar!

+0

Yardımlarınız için teşekkür ederiz. Cevabım sanırım .NET ve C# hakkında bir kaç şey öğrenmeye ihtiyacım var! :) Bu nedenle, bu ortamda nasıl yapılacağımı, ne yapmak istediğimle ilgili en azından belirsiz bir fikre sahip olana kadar, değişim backlog üzerinde geri dönmek zorunda kalacak! lol – user2008415

+0

@ user2008415 Rica ederim! Sağa sopası zor olan bazı şeylerle uğraşıyorsunuz ve umarım aradığınız tüm cevapları bulursunuz! İyi şanslar ve cevabımı kabul ettiğiniz için teşekkür ederim. –

0

Web.config, Çalışma Zamanı'nde değiştirilemez. Kullanıcıların giriş yapmak istedikleri yeri seçmek için kullanmaları için web sitesinde oturum açma bağlantısı veya açılan kutu aracılığıyla bir tür bayrak ayarlamayı öneririm. Bir kullanıcının ne yapmak istediğini anlamak, sunucunun işi değildir.

İlgili konular