Не удается подключиться к любому из указанных MySQL хостов? C# + Heroku + ClearDB - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть веб-API, размещенный на Heroku. Он обслуживает данные из ClearDB через программу Golang. У меня есть сценарий C#. NET, который должен будет вставить данные в эту ClearDB. У меня была эта идея, работающая на моей локальной машине, но когда я переместил все на heroku, часть C# перестала работать.

Мне удалось подключиться к MySQL Workbench 8.0 и к самой моей программе Golang. Программа GO может успешно подключаться, запрашивать и обслуживать данные.

Я знаю, что есть много других подобных вопросов, и большинство из них, похоже, решаются с помощью строки подключения. Я попробовал почти ВСЕ различные способы, которыми вы можете натянуть строку подключения. Это то, что я в последний раз пробовал (учетные данные были изменены на случайные буквы):

connectionData = @"Server = eu-cd-steel-west-01.cleardb.net; Port = 3306; Database = heroku_555555555; Uid = b7039sldk253; Pwd = e3502ldks;";

Ошибка, которую я получаю, возникает при запуске:

connection = new MySqlConnection(connectionData);
connection.Open();

Ошибка:

MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
 ---> System.InvalidOperationException: Sequence contains more than one matching element
   at System.Linq.ThrowHelper.ThrowMoreThanOneMatchException()
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at MySql.Data.Common.StreamCreator.GetTcpStream(MySqlConnectionStringBuilder settings)
   at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.NativeDriver.Open()
   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 DatabaseTesting.DataBaser.connect() in C:\Users\surf.user\source\repos\DatabaseTesting\DatabaseTesting\DataBaser.cs:line 38

Я понимаю, что есть учетные данные SSL и все виды вещей, но я склонен полагать, что это не имеет значения, поскольку мне не нужно было настраивать что-то специальное для подключения в рабочей среде. Что еще нужно сделать, чтобы успешно открыть соединение ClearDB на C#?

1 Ответ

1 голос
/ 05 февраля 2020

Я подозреваю, что вы столкнулись с этой известной ошибкой в ​​Oracle 'MySQL Connector /NET: bug 97448 . (Я не могу разрешить имя домена, которое вы задали в вопросе, но если оно разрешает более одной A записи, это вызовет ошибку.)

Исправление заключается в удалении MySql.Data NuGet упакует и установит MySqlConnector вместо: https://www.nuget.org/packages/MySqlConnector/

. Он поддерживает тот же API, что и MySql .Data, поэтому он должен быть заменой.

...