[C#]Settings delen tussen applicaties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Ik ben bezig met een project wat uit verschillende applicaties (WinForms) gaat bestaan. Deze applicaties moeten allemaal verbinding maken met dezelfde database. Nu zoek ik dus de beste manier om de connectie string te delen tussen de verschillende applicaties.

Nu kan ik dit zelf wel maken door de connectie string in een xml bestand of de registry op te slaan, maar ik wil eigenlijk de standaard .Net classes hiervoor gebruiken. Ik heb al wat gezocht of dit mogelijk was met de standaard settings files van .Net, maar het lijkt erop dat dit niet mogelijk is. Weet iemand of dit wel mogelijk is en zo ja hoe, of een andere manier om de settings te delen?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Razr
  • Registratie: September 2005
  • Niet online
Kun je misschien een reference van het ene project (met de settings) toevoegen aan de andere projecten en zo die settings benaderen?

Acties:
  • 0 Henk 'm!

  • Compuhair
  • Registratie: September 2009
  • Laatst online: 17-09 09:14
ik snap 't punt niet zo. Als je elke app zijn eigen app.config geeft en daarin de connectiestring zet die verwijst naar die ene DB, dan ben je er toch ook?

Als je 1 plek wilt hebben waar de connection string staat, dan zal iedere app moeten weten wat die ene plek is. Dus je blijft volgens mij houden dat je ergens moet registreren waar elke app moet zoeken voor settings.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Compuhair schreef op donderdag 21 januari 2010 @ 11:00:
Als je 1 plek wilt hebben waar de connection string staat, dan zal iedere app moeten weten wat die ene plek is. Dus je blijft volgens mij houden dat je ergens moet registreren waar elke app moet zoeken voor settings.
Dat wil ik ook, en ik wil graag weten of daar ook standaard voorzieningen voor zijn in het framework.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:56
urk_forever schreef op donderdag 21 januari 2010 @ 11:23:
[...]


Dat wil ik ook, en ik wil graag weten of daar ook standaard voorzieningen voor zijn in het framework.
machine.config .... Maar, dan kan iedere .NET app er aan volgens mij. (Aangezien app.config 'overerft' van machine.config).
Maar, ik zou het zo niet doen, denk ik.

Gewoon, iedere app z'n eigen app.config geven, met daarin de connectionstring.

[ Voor 14% gewijzigd door whoami op 21-01-2010 11:25 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Of je gebruikt het registry... Niet dat dat heel mooi is, maar het is wel centraal :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Wellicht dat je een 'check for updates' achtige functionaliteit in kunt bouwen die contact maakt met een centrale server en die vervolgens wanneer nodig je connectiestring wijzigt wanneer nodig. Je kunt vanuit je applicatie programmatisch permanent je web.config wijzigen als het goed is zonder dat je hem compleet moet overschrijven, dus gewoon in de XML tree wijzigen.

Maar dan heb je wel weer een kip-ei probleem, want de connectiestring naar je updateserver mag dan natuurlijk nooit meer veranderen. Dus ik denk dat het alleeen vruchten afwerpt als je verwacht dat er in de toekomst meer centraal geupdate moet worden.
RobIII schreef op donderdag 21 januari 2010 @ 11:28:
Of je gebruikt het registry... Niet dat dat heel mooi is, maar het is wel centraal :P
Als het wel allemaal op een computer draait natuurlijk wel....zou best een goede oplossing zijn d:)b

Misschien zou je ook wat met LDAP kunnen doen als het moet.....maar dat stinkt een beetje.....;)

[ Voor 24% gewijzigd door BikkelZ op 21-01-2010 11:34 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
RobIII schreef op donderdag 21 januari 2010 @ 11:28:
Of je gebruikt het registry... Niet dat dat heel mooi is, maar het is wel centraal :P
De registry is zooo VB6 :P 8)7 Ik had dus al aangegeven dat het een optie zou kunnen zijn, maar waarschijnlijk zou ik dan eerder het in een xml bestand opslaan.

Maar ik kan met niet voorstellen dat zoiets niet bestaat. Het gaat nu om een connectiestring, maar het zal toch vast wel vaker voorkomen dat je instellingen tussen applicaties wilt delen?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Je hebt natuurlijk de Common Files map in Program Files. Zou je daar niet iets mee kunnen? Die map wordt volgens mij vaak voor dat soort doeleinden gebruikt. :) Als je daar nou je eigen settings opslaat dan kan elke applicatie er op dezelfde manier bij, omdat het een systeemmap is.

Dus bijv:
code:
1
C:\Program Files\Common Files


MSDN Systeemmappen

edit:
@creator1988
Daar heb je wel flink wat rechten voor nodig, wil je daar zomaar kunnen schrijven. Een van de systeemmappen die daarvoor bedoeld zijn lijken mij een betere plaats :) Maar dat is inderdaad wel een manier waarop je het zou kunnen doen ja.

[ Voor 36% gewijzigd door Cloud op 21-01-2010 12:09 ]

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 20:55
Gebruik de oude <appSettings>. Die heeft nog gewoon

<appSettings file="C:\Config\appSettings.config">

Gebruiken wij nog steeds ontzettend veel. > 20 apps die hiermee alle connection strings sharen.

Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 20:37

BM

Moderator Spielerij
Je kunt toch vanuit de web/app.config van je applicatie een link legen naar een ander extern xml bestand waar de settings in staan? Als je dan al je applicaties naar dat ene bestand laat wijzen zou je er moeten zijn.

Edit: net paar tellen te laat. Wat creator1988 zegt dus :)

[ Voor 12% gewijzigd door BM op 21-01-2010 12:07 ]

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:05

Reptile209

- gers -

Cloud schreef op donderdag 21 januari 2010 @ 11:38:
Je hebt natuurlijk de Common Files map in Program Files. Zou je daar niet iets mee kunnen? Die map wordt volgens mij vaak voor dat soort doeleinden gebruikt. :) Als je daar nou je eigen settings opslaat dan kan elke applicatie er op dezelfde manier bij, omdat het een systeemmap is.

Dus bijv:
code:
1
C:\Program Files\Common Files


MSDN Systeemmappen

edit:
@creator1988
Daar heb je wel flink wat rechten voor nodig, wil je daar zomaar kunnen schrijven. Een van de systeemmappen die daarvoor bedoeld zijn lijken mij een betere plaats :) Maar dat is inderdaad wel een manier waarop je het zou kunnen doen ja.
Voor alles binnen Program Files heb je vanaf Vista toch ook Admin-rechten nodig? Lijkt me ook niet ideaal.

Je kunt natuurlijk een heel simpel servertje schrijven dat via een telnet-achtige verbinding naar de database-server (of lokale PC) de connection string aanbiedt. Maar of dat nou minder werk is dan die string gewoon te hard-coden in je app... Om nog maar te zwijgen over gezeur met firewalls.
Nog een idee: een shared DLL maken die de verbinding definieert?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • NS_5
  • Registratie: Februari 2005
  • Laatst online: 18-12-2024
Misschien kun je in je %temp% map een bestandje maken waarin je de connectie-string kwijt kunt. Als je bestandje bestaat lees je hem uit en gebruik je hem. Bestaat hij niet, maak je een connectie en schrijf je het bestandje.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:05

Reptile209

- gers -

Dan moet ieder programma toch alsnog zelf die connectionstring kennen om 'm weg te kunnen schrijven in de %temp% dir? :?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Reptile209 schreef op donderdag 21 januari 2010 @ 20:32:
[...]

Voor alles binnen Program Files heb je vanaf Vista toch ook Admin-rechten nodig? Lijkt me ook niet ideaal.

Je kunt natuurlijk een heel simpel servertje schrijven dat via een telnet-achtige verbinding naar de database-server (of lokale PC) de connection string aanbiedt. Maar of dat nou minder werk is dan die string gewoon te hard-coden in je app... Om nog maar te zwijgen over gezeur met firewalls.
Nog een idee: een shared DLL maken die de verbinding definieert?
In XP (en misschien ook 2000) ook al hoor. Alleen viel dat nooit zo op omdat iedereen als Admin ingelogd was. Op dit moment neig ik ernaar om een klasse in een gedeelde dll te maken die met xml serializatie een xml documentje inleest en wegschrijft. Mocht het bestand niet aanwezig zijn wordt er een exceptie gegooid.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 10-09 11:15
C#:
1
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)


Is de %AppData% folder van Windows.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • NS_5
  • Registratie: Februari 2005
  • Laatst online: 18-12-2024
Ik bedoelde een gedeeld bestandje. %temp%\appconnectionstring.txt, bijvoorbeeld. Alleen jou applicaties gebruiken dat bestandje. Dat zal toch geen probleem opleveren?

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Als je integrated security gebruikt voor het verbinden met je database, dan kun je ook DNS SRV records gebruiken. Met SRV records kun je een weighted lijst opbouwen van ip's en poortnummers. SRV records zijn een officiele standaard om de locatie(s) van services te defineren. Windows gebruikt deze records om bijvoorbeeld de LDAP (Active Directory) , Kerberos en kpasswd services te defineren voor een domein.

Bind zone records:
_ficres._tcp  IN SRV  0 5   1433   10.0.2.41
_ficres._tcp  IN SRV  0 10  1433   10.0.2.42
_ficres._tcp  IN TXT  "dbname=ficres_test_dev; dbtype=mssql2008;"


Deze records worden toegevoegd aan zone waarin de workstations zijn opgenomen (corp.example.org oid). Dus als jouw machine hostname ws34.corp.example.org heeft, dan query je de SRV records voor _ficres._tcp.corp.exmaple.org. Ik geef toe dat deze methode omslachtig kan zijn als alle programma's op 1 of 2 machines draaien, maar als je honderden clients en processen moet kunnen configureren dan zijn SRV records echt ideaal.

De TXT record bevat extra informatie welke door onze applicaties worden verwerkt om een juiste connectie string op te bouwen. Deze methode is niet veilig als je credentials wilt opnemen in je connectionstring, want iedereen met toegang tot de DNS gegevens zou deze gegevens dan kunnen inzien en eventueel misbruiken.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
NS_5 schreef op donderdag 21 januari 2010 @ 22:28:
Ik bedoelde een gedeeld bestandje. %temp%\appconnectionstring.txt, bijvoorbeeld. Alleen jou applicaties gebruiken dat bestandje. Dat zal toch geen probleem opleveren?
De temp directory is daar niet de geëigende locatie voor. Die is namelijk bedoeld voor tijdelijke bestanden die ook weer weg kunnen. Daar wil je geen instellingen in opslaan. Dan kan je beter een map in de AppData folder van de gebruiker gebruiken.

@Niemand_Anders: Dat is wel een heel creatieve manier. Leuk bedacht :)

[ Voor 6% gewijzigd door urk_forever op 22-01-2010 11:00 ]

Hail to the king baby!


Acties:
  • 0 Henk 'm!

Verwijderd

C#:
1
2
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)


De eerste is gebruiker-specifiek, de andere is voor iedere gebruiker op de computer.

Ik vraag me alleen altijd af hoe je hier tijdens het ontwikkelen het beste mee om kan gaan. Dan wil je die mappen misschien wel helemaal niet gebruiken.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 22 januari 2010 @ 15:38:
Ik vraag me alleen altijd af hoe je hier tijdens het ontwikkelen het beste mee om kan gaan. Dan wil je die mappen misschien wel helemaal niet gebruiken.
C#:
1
2
3
4
5
#if DEBUG
    Mypath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
#else
    Mypath = Whatevah;
#endif

:?

[ Voor 13% gewijzigd door RobIII op 22-01-2010 15:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

RobIII schreef op vrijdag 22 januari 2010 @ 15:46:
[...]

C#:
1
2
3
4
5
#if DEBUG
    Mypath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
#else
    Mypath = Whatevah;
#endif

:?
Niet andersom?
Pagina: 1