2010-07-09 8 views
1

작은 배경 :SqlConnection 오류 명명 된 파이프 공급자

나는 북미 전역의 약 40 명의 현장 직원이 사용하는 Windows .NET 응용 프로그램이 있습니다. 이 프로그램을 사용하면 사용자는 현장에서 데이터를 입력 할 수 있으며 (야간 양식 인터넷 액세스) 밤에는 Sql Server 2005 데이터베이스와 동기화됩니다. 며칠 전, 두 명의 사용자가 .NET 데이터베이스의 SqlConnection 클래스를 사용하는 서버 데이터베이스에 연결을 시도하는 작업을 수행 할 때 다음 오류가 발생했다고보고했습니다.

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

우리 현장 직원은 일반적으로 호텔로 Wi-Fi 연결에서 작동되며, 처음에 나는 그들이 모두 우연히 같은 날에 "비협조적인"네트워크에있어 생각했다. 다음날 다른 호텔로 이전하면서이 사용자 중 한 명이 문제를 해결했지만 다른 사용자는 문제가 계속되었습니다.

오류 메시지를 제공하는 것 외에도,이 배경의 목적은 지적하는 것입니다

  • 는이 문제는이 소프트웨어를 사용하는 한 해 동안 발생했습니다 처음이며,
  • 대부분 의 사용자가 동일한 소프트웨어로 서버 데이터베이스에 연결하는 데 문제가 없습니다.

이렇게하면 문제가 서버에 있다고 생각하기 쉽습니다 (이 오류에서 읽은 대부분의 포럼과 블로그는 SQL Server가 올바르게 구성되었는지 확인하기위한 단계를 제공합니다). 오류 메시지의 명명 된 파이프 공급자 부분을주의해서

, 나는 어쩌면이 사용자의 컴퓨터 나 네트워크가 오히려 TCP 이상의 파이프를 통해 연결을 시도하는 원인이되었다는 것을 짐작, 그래서 허용하도록 서버를 구성하려고 않았다 BOTH TCP/IP 및 이전에 TCP/IP로 설정된 원격 연결의 명명 된 파이프. 이 설정을 변경 한 후에이 한 명의 사용자에 대해 오류가 계속되었습니다.

이제 SQL Server에 연결할 수 없게 만드는이 사용자의 컴퓨터/소프트웨어/인터넷 연결에 대해 특별한 아이디어가 될 수 있는지 생각해 보겠습니다.

우리의 연결 문자열은 IP 주소가 아닌 서버의 URL을 사용하며, 해당 랩톱에서 해당 주소로 찾는 데 문제가 있는지 궁금해했습니다. 그러나 그는 동일한 URL에서 호스팅되는 웹 사이트에 액세스 할 수 있었으므로 문제는 다른 곳에서 발생했을 것입니다.

모든 아이디어는 크게 감사하겠습니다. 감사!

답변

1

방화벽이 호텔의 방화벽에 의해 차단되어있어 특정 포트에서만 트래픽을 허용 할 수 있습니까?

+0

나는 그것에 대해 생각해 보았지만, 왜 우리는 전에이 문제가 있었는지 설명하지 않고, 지금은 두 개의 다른 호텔에서 3 일 동안이 문제를 겪은 사람이 있습니다. 부수적으로, 그는 그가 그 지역에있을 때마다 그가이 호텔에 머무르고 이전에는이 ​​문제가 한번도 없었다고 말했다. –

3

지금까지이 문제를 해결한지 오래되었지만 SQL 서버 인스턴스에 연결할 때 오류 40/명명 된 파이프 문제와 유사한 문제가있는 사용자의 경우 다음 간단한 해결책이 유용했습니다.

연결 문자열에 접두사를 추가하여 클라이언트 프로그램이 TCP (또는 명명 된 파이프 또는 다른 사용 가능한 방법)를 사용하도록 할 수 있습니다.

.NET 경우 SQLConnection 예, 그래서 같은 경우 SQLConnection의 연결 문자열에 지정

Server=tcp:192.168.0.1;Integrated Security=SSPI; database=sampledb 

See this blog entry 대한 추가 정보를 원하시면.