C# Connection string met meerdere data sources gebruiken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
Ik probeer vergeefs een connection string met meerdere data sources te laten werken in een .net web applicatie met EF6. De database provider is MySQL in een geclusterd omgeving.
Volgens de documentatie (https://dev.mysql.com/doc...t-connection-options.html) zou het mogelijk moeten zijn om meerdere hosts op te kunnen geven in het Data Source/Server deel van de connection string. Dit gescheiden met komma’s.

Connection string die ik gebruik:

XML:
1
<add name="Test1" connectionString="server=10.10.2.10, 10.10.2.11, 10.10.2.12;database=api;uid=debug;password=xxxxxxxxxx" providerName="MySql.Data.MySqlClient" /> 



Ik krijg vervolgens deze Exception:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
System.Data.Entity.Core.ProviderIncompatibleException occurred
  HResult=-2146233087
  Message=An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
       at System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k)
       at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
       at System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection)
       at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
       at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
       at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
       at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
       at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
       at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
       at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
       at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
  InnerException: 
       HResult=-2146233087
       Message=The provider did not return a ProviderManifestToken string.
       Source=EntityFramework
       StackTrace:
            at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
            at System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
       InnerException: 
            ErrorCode=-2147467259
            HResult=-2147467259
            Message=Unable to connect to any of the specified MySQL hosts.
            Number=1042
            Source=MySql.Data
            StackTrace:
                 at MySql.Data.MySqlClient.NativeDriver.Open()
                 at MySql.Data.MySqlClient.Driver.Open()
                 at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
                 at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
                 at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
                 at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
                 at MySql.Data.MySqlClient.MySqlPool.GetConnection()
                 at MySql.Data.MySqlClient.MySqlConnection.Open()
                 at MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
                 at System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
            InnerException: 
                 ErrorCode=11001
                 HResult=-2147467259
                 Message=No such host is known
                 NativeErrorCode=11001
                 Source=System
                 StackTrace:
                      at System.Net.Dns.GetAddrInfo(String name)
                      at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
                      at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
                      at MySql.Data.Common.MyNetworkStream.CreateStream(MySqlConnectionStringBuilder settings, Boolean unix)
                      at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings)
                      at MySql.Data.MySqlClient.NativeDriver.Open()
                 InnerException:


Zodra ik alleen maar een host opneem in de connection string werkt het wel. Heeft iemand een idee wat ik verkeerd doet?

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 16:58

mulder

ik spuug op het trottoir

Kun je alle drie de hosts wel allemaal los bereiken?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Het lijkt me voornamelijk te zitten in regel 31...

Oftewel wat mulder je al vraagt.

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
mulder schreef op maandag 22 mei 2017 @ 17:14:
Kun je alle drie de hosts wel allemaal los bereiken?
Gomez12 schreef op maandag 22 mei 2017 @ 21:24:
Het lijkt me voornamelijk te zitten in regel 31...

Oftewel wat mulder je al vraagt.
Als ik de ip adressen afzonderlijk gebruik werkt het zonder problemen maar zodra ik er al een extra bij zet dan krijg ik weer de eerdergenoemde exception. :/

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 08-10 16:12
rollie444 schreef op maandag 22 mei 2017 @ 21:51:
[...]


[...]


Als ik de ip adressen afzonderlijk gebruik werkt het zonder problemen maar zodra ik er al een extra bij zet dan krijg ik weer de eerdergenoemde exception. :/
Moet je bij een enkele een poort erbij zetten? Lijkt me toch niet dat 'ie default naar 3306 of wel? Zijn ze allemaal wel beschikbaar via die poort?

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
Merethil schreef op maandag 22 mei 2017 @ 22:16:
[...]


Moet je bij een enkele een poort erbij zetten? Lijkt me toch niet dat 'ie default naar 3306 of wel? Zijn ze allemaal wel beschikbaar via die poort?
De database server is op zijn default poort 3306 bereikbaar. Ik heb ook eens geprobeerd om drie keer hetzelfde adres in te vullen. Hierbij wederom dezelfde melding. Ik krijg het idee dat dit een bug is en dat hij de hele string inhoud als een host adres wil interpreteren.

Acties:
  • 0 Henk 'm!

  • Robicide
  • Registratie: Maart 2016
  • Laatst online: 15:24
Misschien trap ik hier een open deur in, maar heb je al geprobeerd om de spaties na de komma's weg te laten?

Acties:
  • 0 Henk 'm!

  • Mint
  • Registratie: Mei 2005
  • Laatst online: 08-10 21:44
Robicide schreef op dinsdag 23 mei 2017 @ 15:16:
Misschien trap ik hier een open deur in, maar heb je al geprobeerd om de spaties na de komma's weg te laten?
Zo staat het in ieder geval wel gedefinieerd in de MySQL .NET connector documentatie:
Multiple hosts can be specified separated by commas.

Acties:
  • +1 Henk 'm!

Verwijderd

By commas, ja, niet by comma-space. ;)

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
Robicide schreef op dinsdag 23 mei 2017 @ 15:16:
Misschien trap ik hier een open deur in, maar heb je al geprobeerd om de spaties na de komma's weg te laten?
Verwijderd schreef op dinsdag 23 mei 2017 @ 16:18:
By commas, ja, niet by comma-space. ;)
Goede opmerking maar ook zonder spaties erin geen succes ;(. Ik heb ook eens host names erin gezet in plaats van ip adressen maar weer hetzelfde gemekker. Mijn opties zijn zo beetje op :(

Acties:
  • 0 Henk 'm!

Verwijderd

Ook wel logisch, de foutmelding heeft het al over meervoud: Unable to connect to any of the specified MySQL hosts.

Wat wel gek is, is dat het misgaat bij een Dns-functie - dat is voor IP-nummers niet nodig. Dat suggereert dat 'ie de IP-nummers niet als zodanig lijkt te herkennen...

Acties:
  • 0 Henk 'm!

  • barber
  • Registratie: Oktober 2001
  • Niet online
Geen ervaring mee, maar bij sommige voorbeelden kom ik dit tegen: server=10.10.2.10&10.10.2.11&10.10.2.12;
Dus door & gescheiden ipv komma.

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
Verwijderd schreef op woensdag 24 mei 2017 @ 00:01:
Ook wel logisch, de foutmelding heeft het al over meervoud: Unable to connect to any of the specified MySQL hosts.

Wat wel gek is, is dat het misgaat bij een Dns-functie - dat is voor IP-nummers niet nodig. Dat suggereert dat 'ie de IP-nummers niet als zodanig lijkt te herkennen...
Ik heb het ook al met host names geprobeerd maar dat maakt geen verschil. :-(
barber schreef op woensdag 24 mei 2017 @ 00:09:
Geen ervaring mee, maar bij sommige voorbeelden kom ik dit tegen: server=10.10.2.10&10.10.2.11&10.10.2.12;
Dus door & gescheiden ipv komma.
Interessant opmerking. Ik heb het geprobeerd met & in de app.config maar ook geen succes. Ben wel benieuwd welke voorbeelden je heb gezien omdat ik dit niet eerder zo ben tegengekomen.

Nog even gekeken op connectionstring.com onder mysql (https://www.connectionstrings.com/mysql/) maar daar staat het ook weer met die komma's (en ook spaties >:) ).

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 10:28

The Eagle

I wear my sunglasses at night

Wat als je op DNS naam aan de slag gaat ipv op IP? Desnoods knal je ff wat in de hostsfile.
Vraag is ook hoe die mysql servers zelf ingesteld staan. Ik neem aan dat die een listener hebben op hostname:poort en niet op ip:poort. Kan zijn dat de handover daardoor mis gaat. Probeer het uit :)

Weet niet of je een MySQL DBA in de buurt hebt (ga dr met een dergelijke setup vanuit van wel), anders die ff vragen.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
The Eagle schreef op woensdag 24 mei 2017 @ 10:30:
Wat als je op DNS naam aan de slag gaat ipv op IP? Desnoods knal je ff wat in de hostsfile.
Vraag is ook hoe die mysql servers zelf ingesteld staan. Ik neem aan dat die een listener hebben op hostname:poort en niet op ip:poort. Kan zijn dat de handover daardoor mis gaat. Probeer het uit :)

Weet niet of je een MySQL DBA in de buurt hebt (ga dr met een dergelijke setup vanuit van wel), anders die ff vragen.
Hostfile toevoegingen gedaan. Hierbij gaat het goed als ik maar een server opgeef maar met meerdere weer dezelfde exceptie. Ook doe ik drie keer dezelfde host in de connection string.

Ik moet het eerst werkend krijgen op met eigen ontwikkelomgeving wat nu nog alleen mijn werkstation is. In mysql gebruik ik een user de % als host heb staan waarbij het naar mijn idee geen probleem moet zijn.

Acties:
  • 0 Henk 'm!

  • barber
  • Registratie: Oktober 2001
  • Niet online
Welke versie van de MySql connector gebruik je? Ik kom ook bug reports tegen dat het voor bepaalde versies niet werkt: https://bugs.mysql.com/bug.php?id=69832

Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
barber schreef op woensdag 24 mei 2017 @ 10:47:
Welke versie van de MySql connector gebruik je? Ik kom ook bug reports tegen dat het voor bepaalde versies niet werkt: https://bugs.mysql.com/bug.php?id=69832
Ik gebruik MySql.Data en MySql.Data.Entity versie 6.9.9 wat uit de nuget repo komt. Dit icm EntityFramework 6.1.3. De betreft een oudere versie dus maar neem niet weg dat het weer de kop op steekt. :P

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 10:28

The Eagle

I wear my sunglasses at night

rollie444 schreef op woensdag 24 mei 2017 @ 10:40:
[...]


Hostfile toevoegingen gedaan. Hierbij gaat het goed als ik maar een server opgeef maar met meerdere weer dezelfde exceptie. Ook doe ik drie keer dezelfde host in de connection string.

Ik moet het eerst werkend krijgen op met eigen ontwikkelomgeving wat nu nog alleen mijn werkstation is. In mysql gebruik ik een user de % als host heb staan waarbij het naar mijn idee geen probleem moet zijn.
Heb je losse VM's voor de mysql instances of draait het spul allemaal op localhost (en dan op welke poorten?

Verder vraag ik me af hoe je dit in productie gaat zetten. Krijg je daar een virtueel IP (DNS) met een stel losse IP's er aan, of komt er wellicht een loadbalancer voor de DB's te staan? Zo ja, dan hoef je helemaal niet hard op te geven. Steker nog, dat wil je dan juist niet hard coderen lijkt me.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
The Eagle schreef op woensdag 24 mei 2017 @ 11:10:
[...]

Heb je losse VM's voor de mysql instances of draait het spul allemaal op localhost (en dan op welke poorten?

Verder vraag ik me af hoe je dit in productie gaat zetten. Krijg je daar een virtueel IP (DNS) met een stel losse IP's er aan, of komt er wellicht een loadbalancer voor de DB's te staan? Zo ja, dan hoef je helemaal niet hard op te geven. Steker nog, dat wil je dan juist niet hard coderen lijkt me.
Mysql server (5.7.17-log) draait niet in een vm maar direct op windows 10. Ik heb meerdere netwerk adapters met daarop verschillende ip adressen. Als ik deze adres per stuk gebruik in mij connection string werkt het probleemloos. Maar ik kan mij niet voorstellen dat dit iets kan zijn (of wel >:) )

Productieomgeving betreft een mysql cluster met drie hosts (multi master :z ). Voorlopig is in de backend geen dns beschikbaar en zou het dus op ip moeten doen.

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 10:28

The Eagle

I wear my sunglasses at night

En op welke host vindt je mysql instance zelf dat ie draait? Localhost? If so kan ie dus het verschil niet maken. Zo flexibel is mysql nou ook weer niet ;)
Nou ben ik geen mysql specialist (doe meer mer Oracle) maar vziw stel je op een mysql instance in op welke host en port ie moet luisteren. Als jij vervolgens met een afwijkende connectiestring aankomt kan ie zijn connectie niet afleveren want hij snapt maar een van drieen en niet alle drie tegelijk, ook omdat ie maar 1 poort ter beschikking heeft

Probeer eens wat het doet als je 3 kleine VM's op zet. Dikke kans dat het dan al beter werkt :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • rollie444
  • Registratie: Mei 2011
  • Laatst online: 27-09 14:19
The Eagle schreef op woensdag 24 mei 2017 @ 11:40:
En op welke host vindt je mysql instance zelf dat ie draait? Localhost? If so kan ie dus het verschil niet maken. Zo flexibel is mysql nou ook weer niet ;)
Nou ben ik geen mysql specialist (doe meer mer Oracle) maar vziw stel je op een mysql instance in op welke host en port ie moet luisteren. Als jij vervolgens met een afwijkende connectiestring aankomt kan ie zijn connectie niet afleveren want hij snapt maar een van drieen en niet alle drie tegelijk, ook omdat ie maar 1 poort ter beschikking heeft

Probeer eens wat het doet als je 3 kleine VM's op zet. Dikke kans dat het dan al beter werkt :)
mysql server bind zich op 0.0.0.0 en op :: met poort 3306. Dit zou ok moeten zijn. Dat alleen 3306 word gebruikt zou denk ik niet uit moeten maken voor meerdere connecties omdat de source port anders is. Correct me if i am wrong.

VM's aanmaken zou kunnen maar is weer zoveel werk :>
Pagina: 1