Исключения сокетов при попытке подключения к базе данных MySql из IDE gitpod (сервер Ubuntu) - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю с интерактивной IDE gitpod (против кода в браузере с сервером ubuntu linux за ним). Я пытаюсь создать соединение с моей базой данных mysql на другом сервере linux (CentOS). Я установил для удаленных MySql хостов на сервере базы данных значение «%» => «все разрешено».

Я использую пакет MySql Connector: https://www.nuget.org/packages/MySqlConnector подключиться к нему. Вот как выглядит мой код:

public async Task<List<User>> GetUsersAsync()
{
      List<User> readUsers = new List<User>();
      string connection = "server=myserverip;database=db;user=user;password=pwd";
      using (MySqlConnection con = new MySqlConnection(connection))
      {
           MySqlCommand cmd = new MySqlCommand("SELECT * FROM admin", con);
           cmd.CommandType = CommandType.Text;
           con.Open();

           MySqlDataReader rdr = cmd.ExecuteReader();
           while(rdr.Read())
           {
               User user = new User();
               user.ID = Convert.ToInt32(rdr["ID"]);
               user.Username = rdr["Username"].ToString();
               user.Password = rdr["Password"].ToString();
               readUsers.Add(user);
           }
      }
      return readUsers;
}  

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

image of errors in console

Я не уверен как продолжить или что попробовать сейчас.

1 Ответ

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

Похоже, что из стека вызовов вы компилируете свой код в wasm, используя Blazor. Этот код выполняется в браузере и подчиняется всем ограничениям песочницы браузера. В частности, в браузере нет возможности открывать сокет TCP для сетевого взаимодействия.

Дополнительная справочная информация: здесь :

Blazor работает в изолированной программной среде браузера и не может сделать больше, чем javascript может по сети. Технически это невозможно.

И здесь :

Сетевые API-интерфейсы TCP, которые не могут работать в браузере, начиная с JavaScript не предоставляет необработанных сетевых возможностей TCP. Это, естественно, приводит к сбою во время выполнения где-то в самом низу стека.

Вот почему вы получаете PlatformNotSupportedException.

Чтобы это исправить, вам нужно будет перестроить свою архитектуру. код, позволяющий установить соединение MySQL из кода, выполняющегося на веб-сервере, а код Blazor отправляет HTTP-запрос (к веб-API) для вызова кода на стороне сервера, выполняющего операцию с базой данных.

...