2012-02-17 15 views
5

Próbuję uzyskać wartość usługi w mojej aplikacji z app.config. Muszę wysłać go do aplikacji, która pokazuje adres URL. Usługa sieciowa, której używam w tej aplikacji, również jej używa, więc nie można jej przenieść do aplikacji.Jak uzyskać wartość z aplikacji ustawień?

Chcę uzyskać tę wartość "http://192.168.4.22:82/Service.asmx" za pośrednictwem kodu C#.

<applicationSettings> 
    <SDHSServer.Properties.Settings> 
     <setting name="DOServer_WebReference1_Service" serializeAs="String"> 
     <value>http://192.168.4.22:82/Service.asmx</value> 
     </setting> 
    </SDHSServer.Properties.Settings> 
    </applicationSettings> 
+1

[System.Configuration.ConfigurationManager.GetSection()] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx) –

+0

Lub w sposób [bardziej typowo] (http://msdn.microsoft.com/en-us/library/aa730869 (v = vs.80) .aspx). Pracowałem z aplikacją ASP.NET, ale nie sądzę, że jest duża różnica. – Oybek

+0

Twój urywek powyżej pokazuje, że ustawienie, które próbujesz uzyskać, jest już * w * ustawieniu aplikacji, co powiedziałeś, że nie chcesz tego robić. Który to jest? –

Odpowiedz

8

Nie wiesz, ja się pytanie,

string s = SDHSServer.Properties.Settings.DOServer_WebReference1_Service; 

będzie Ci to

4

Jeśli rozumiem zostanie poprawnie masz dwie Visual Studio C# projektów. Pierwszy (projekt A) ma ustawienie, do którego chcesz uzyskać dostęp w drugim (projekt B). Aby to zrobić trzeba wykonać następujące czynności:

  • dodać odwołanie od projektu B do projektu

  • Zmienić modyfikator dostępu do ustawień i rzutować na publiczny (domyślnie jest to wewnętrzna)

    Visual Studio settings editor

  • teraz można uzyskać dostęp do ustawienia w projekcie B, w przypadku korzystania w pełni kwalifikowaną nazwę SDHSServer.Properties.Settings.Default.DOServer_WebReference1_Service

Należy pamiętać, że w edytorze ustawień można ustawić wartość dla ustawienia. Jest to domyślna wartość ustawienia i ta wartość jest również przechowywana w pliku App.config dla projektu. Można jednak zastąpić tę wartość, podając kolejną wartość w pliku App.config dla aplikacji wykonującej.

W tym przykładzie plik App.config dla projektu A będzie zawierał wartość ustawienia: http://192.168.4.22:82/Service.asmx. Można jednak zastąpić to w pliku App.config dla projektu B, aby uzyskać inną wartość. To prawdopodobnie nie jest to, co chcesz zrobić, ale powinieneś być tego świadomy.

+0

Kciuk w górę, ponieważ wspomniał o konieczności ustawienia modyfikatora dostępu do ustawień publicznych w celu uzyskania do niego dostępu. –

2

Używam tego kodu w witrynie ASP.Net 4.0 do ściągania danych rozdział z sekcji 'applicationsetting':

public sealed class SiteSupport { 


    /// <summary> 
    /// Retrieve specific section value from the web.config 
    /// </summary> 
    /// <param name="configSection">Main Web.config section</param> 
    /// <param name="subSection">Child Section{One layer down}</param> 
    /// <param name="innersection">Keyed on Section Name</param> 
    /// <param name="propertyName">Element property name</param> 
    /// <returns></returns> 
    /// <example>string setting = NoordWorld.Common.Utilities.SiteSupport.RetrieveApplicationSetting("applicationSettings", "NoordWorld.ServiceSite.Properties.Settings", "ServiceWS_SrvWebReference_Service", "value")</example> 
    public static string RetrieveApplicationSetting(string configSection, string subSection, string innersection, string propertyName) { 
     string result = string.Empty; 
     HttpWorkerRequest fakeWorkerRequest = null; 
     try { 
      using (TextWriter textWriter = new StringWriter()) { 
       fakeWorkerRequest = new SimpleWorkerRequest("default.aspx", "", textWriter); 
       var fakeHTTPContext = new HttpContext(fakeWorkerRequest); 
       Configuration config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = fakeHTTPContext.Server.MapPath(@"~/Web.config") }, ConfigurationUserLevel.None); 
       ConfigurationSectionGroup group = config.SectionGroups[configSection]; 
       if (group != null) { 
        ClientSettingsSection clientSection = group.Sections[subSection] as ClientSettingsSection; 
        if (clientSection != null) { 
         SettingElement settingElement = clientSection.Settings.Get(innersection); 
         if (settingElement != null) { 
          result = (((SettingValueElement)(settingElement.ElementInformation.Properties[propertyName].Value)).ValueXml).InnerText; 
         } 
        } 
       } 
      } 
     } catch (Exception ex) { 
      throw ex; 
     } finally { 
      fakeWorkerRequest.CloseConnection(); 
     } 
     return result; 
    } 
} 

https://www.ServiceWS.com/webservices/Golf

0

Zależy coś takiego.

var s = SDHSServer.Properties.Settings.Default.DOServer_WebReference1_Service; 

lub

var s = SDHSServer.Properties.Settings.DOServer_WebReference1_Service; 
Powiązane problemy