0

로컬 컴퓨터에서 문제없이 SQL Azure에 연결하는 .NET 웹 응용 프로그램이 있습니다. 그런 다음 동일한 컴퓨터에서 같은 솔루션으로 다른 명령 줄 .NET 응용 프로그램을 만들었습니다. web.config에서 app.config으로 연결 문자열을 복사하고 웹 서버와 동일한 어셈블리를 참조했습니다 (my connection/Entity 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 버전은 액세스 동일한 데이터베이스 매우 동일한 연결 문자열을 사용하고 같은 어셈블리/패키지 버전을 사용하는 수 있습니다 시온 등등.
  • 내 솔루션을 정리/다시 작성하고 Visual Studio를 다시 시작한 다음 여러 번 PC를 다시 시작했습니다.
  • netsh Winsock reset을 성공적으로 실행했으며 이후에 내 PC를 다시 시작했습니다.
  • 내 컴퓨터에 바이러스 백신/맬웨어 방지 프로그램이나 방화벽이 없습니다. 그런 의미에서 Windows 방화벽 및 Windows 10 구성 요소 이외의 다른 기능은 없었습니다. (예, 물론 팬더 바이러스 백신도 없습니다 .Foodware도 아니고 OEM이 아닌 원래 Windows 10 설치입니다.)
  • Windows 방화벽을 사용해 보았지만 영향을 미치지 않았습니다. .
  • 기계가 Parallels에서 가상 머신으로 실행 중입니다. Windows에는 다중 네트워크 어댑터가 없으므로 내 웹 앱과 콘솔 앱은 같은 의미의 "인터넷 연결"을 사용합니다.
  • 연결 시간 초과는 30 초입니다. 단, 30 초가 지나면 즉시 오류가 발생합니다. (성공적으로 연결되었음을 나타냅니다.)
  • 두 프로젝트는 Visual Studio 2015 Update 3을 통해 디버깅 한 동일한 Windows 10 시스템에서 실행되며 .NET Framework 4.6에 대해 작성됩니다.
  • 나는 지난 몇 주간 문제가되는 프로젝트에 손댈조차하지 못했지만 몇 주 전에는 완벽하게 작동했습니다.
  • 일 수 있습니다. 피들러가 설치되어 있지만 작동하기 전에 항상 설치해 두었습니다. 몇 주 후에, AFAIR, 저는 Steam과 Visual Studio 2017 RC를 설치했습니다. 그러나 그들은 열려 있지 않습니다.
  • Azure 측에서 의심스러운 오류 등이 발생하지 않습니다.
  • SQL Server Management Studio를 사용하여 동일한 자격 증명으로 서버에 액세스 할 수 있으며 문제없이 데이터베이스를 쿼리 할 수 ​​있습니다. (SSMS를 열고, 닫은 상태에서 그리고/또는 다시 시작한 후/열지 않은 상태에서 같은 문제를 겪고 있습니다.)
  • 같은 문제에 관해 수많은 질문을 보았습니다. 그러나 거의 모든 항목이 바이러스 백신/방화벽을 가리키고 winsock을 재설정했으며 이미 완료했습니다.여기

은 config 파일에서 정확하게 (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

이것은 암호화 된 연결이므로 .Net 쪽의 SSL에 문제가있을 수 있습니다. '작동중인'앱에서'ServicePointManager'를 찾을 수 있습니다. 어쩌면 다시 해킹 할 수 있습니다. – 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 데이터베이스에 연결되는 것을 방지하면 두 응용 프로그램이 작동하지 않아야합니다. 이 문제를 재현하기가 어렵습니다. 콘솔 응용 프로그램을 만들어 테이블을 만들고 Entity Framework 코드 첫 번째 접근 방식을 통해 Azure SQL 데이터베이스에 레코드를 추가합니다. 응용 프로그램이 내 측면에서 잘 작동합니다.

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; } 
} 

Main 메서드

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); 
    } 
} 
관련 문제