0

У меня есть веб-приложение .NET, которое подключается к SQL Azure без каких-либо проблем с моей локальной машины. Затем, на той же машине, я создал другое приложение командной строки .NET в том же решении, скопировал строку подключения от web.config до app.config, ссылаясь на то же самое: сборок с веб-сервером (мое соединение/сущность Framework/model слой находится на собственной сборке) и попытался получить доступ к моей базе данных. Я получаю следующее сообщение об ошибке:SQL Azure: SSL-провайдер, ошибка: 0 - Ожидаемая операция ожидания

Exception thrown: 'System.Data.SqlClient.SqlException' in System.Data.dll 

Additional information: A connection was successfully established with the server, 
but then an error occurred during the pre-login handshake. (provider: SSL Provider, 
error: 0 - The wait operation timed out.) 

Теперь, прежде чем указать на многие другие вопросы там, позвольте мне сказать вам заранее:

  • .NET-приложение с же .NET версия, на же компьютером/раствора способен доступ к той же базе данных, используя ту же самую строку подключения и используя же сборок/пакет вер sions и т. д. без проблем.
  • Я очистил/восстановил свое решение, перезапустил Visual Studio и перезапустил мой компьютер несколько раз.
  • Я успешно выполнил netsh Winsock reset и перезапустил свой компьютер после этого.
  • На моем ПК нет антивируса/вредоносного ПО или брандмауэра. В этом смысле никогда не было ничего, кроме брандмауэра Windows и встроенного в компоненты Windows 10. (да, конечно, никаких антивирусов Panda в частности. nope, no bloatware тоже, это оригинальная установка Windows 10, а не OEM)
  • Я пытался с брандмауэром Windows как включить, так и выключить, похоже, не влияет ,
  • Машина работает как виртуальная машина на Parallels, если она имеет какой-то смысл. Для Windows нет нескольких сетевых адаптеров, поэтому в моем приложении и в консольном приложении используется одно и то же «подключение к Интернету».
  • Тайм-аут соединения составляет 30 секунд, хотя я получаю ошибку сразу, а не через 30 секунд. (он говорит, что он все равно успешно подключен)
  • Оба проекта, запущенные на той же машине Windows 10, отлаженной через обновление Visual Studio 2015 Update 3, построены на платформе .NET Framework 4.6.
  • Я даже не затронул проблемный проект за последние несколько недель, и он работал отлично несколько недель назад.
  • Как все, что может быть быть подозрительным: у меня установлен Fiddler, но я всегда устанавливал его в то время, когда он работал. За несколько недель AFAIR я только что установил Steam и Visual Studio 2017 RC, но они не открыты.
  • У меня нет подозрительных ошибок и т. Д. На стороне Azure.
  • Я могу получить доступ к серверу с теми же учетными данными с помощью SQL Server Management Studio и без проблем запросить базу данных. (У меня такая же проблема как с SSMS открытым, закрытым, так и после перезапуска с открытием/без него).
  • Я видел бесчисленное количество вопросов относительно одной и той же проблемы, однако они почти все указывают на антивирус/брандмауэр и рассеивание winsock, и я уже это сделал.

Вот мои строки подключения именно из конфигурационного файла (чувствителен информация заменяется XXXX):

<connectionStrings> 
    <add name="Data" connectionString="Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User [email protected];Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Помните, что та же строка подключения также используется в другом проекте, и он не работает с не вопросы.

У меня нет идей. Что может быть неправильным?

+0

Поскольку это зашифрованное соединение, могут возникнуть проблемы с SSL с .Net. Вы можете попробовать искать «ServicePointManager» в своем «рабочем» приложении - возможно, есть некоторые хаки re certifcate/tls version и т. Д. – Lanorkin

ответ

1

Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User [email protected];Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework"

Строка подключения кажется нормально. В соответствии с вашим описанием консольное приложение и веб-приложение находятся в одном и том же решении и работают в одной локальной среде, если правила брандмауэра не позволяют приложениям подключаться к базе данных Azure SQL, оба приложения не должны работать. Трудно воспроизвести проблему, я создаю консольное приложение для создания таблицы и добавления записей в базу данных Azure SQL через Entity Framework Code First, приложение отлично работает на моей стороне.

DbContext

class BloggingContext: DbContext 
{ 
    public BloggingContext() 
     : base("name=Data") 
    { 
    } 

    public virtual DbSet<Blog> Blogs { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    } 

} 

класс Модель

class Blog 
{ 
    public Blog(){} 

    public int BlogId { get; set; } 

    [StringLength(200)] 
    public string Name { get; set; } 

    [StringLength(200)] 
    public string Url { get; set; } 
} 

Основной метод

class Program 
{ 
    static void Main(string[] args) 
    { 

     using (var db = new BloggingContext()) 
     { 
      Console.Write("Enter a name for a new Blog: "); 
      var name = Console.ReadLine(); 

      var blog = new Blog { Name = name }; 
      db.Blogs.Add(blog); 
      db.SaveChanges(); 

      var query = from b in db.Blogs 
         orderby b.Name 
         select b; 

      Console.WriteLine("All blogs in the database:"); 
      foreach (var item in query) 
      { 
       Console.WriteLine(item.Name); 
      } 

      Console.WriteLine("Press any key to exit..."); 
      Console.ReadKey(); 
     } 

    } 
} 

Вы можете создать новое консольное приложение с моим примером кода, чтобы проверить, работает ли оно. Или вы можете запустить приложение на другом компьютере, чтобы убедиться, что будет отображаться одна и та же проблема.

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

static void Main(string[] args) 
{ 
    using (var connection = new SqlConnection(
     "Server=tcp: XXXX.database.windows.net,1433;Database= XXXX;User ID= XXXX;Password= XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;App=EntityFramework" 
     )) 
    { 
     connection.Open(); 
     Console.WriteLine("Connected successfully."); 

     Console.WriteLine("Press any key to finish..."); 
     Console.ReadKey(true); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^