복합 서버 선택기를 사용하여 서버를 선택한 후 30000ms 후 시간 초과가 발생했습니다.
Mongo 데이터베이스를 Mongo abs에 배치하려고 노력하고, 모든 것이 잘 작동하고, 새로운 데이터베이스를 만듭니다.제 연결 문자열을 보십시오.
public DbHelper()
{
MongoClientSettings settings = new MongoClientSettings()
{
Credentials = new MongoCredential[] { MongoCredential.CreateCredential("dbname", "username", "password") },
Server = new MongoServerAddress("ds011111.mongolab.com", 11111),
//ConnectTimeout = new TimeSpan(30000)
};
Server = new MongoClient(settings).GetServer();
DataBase = Server.GetDatabase(DatabaseName);
}
그러나 데이터베이스를 연결하려고 하면 다음과 같은 오류가 표시됩니다.
MongoLab에 연결하는 경우 연결 문자열의 끝에 "?connect=messageSet"을 추가합니다.
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
이 JIRA 티켓에는 몇 가지 세부 정보가 있습니다. https://jira.mongodb.org/browse/CSHARP-1160
기본적으로 복제 세트 구성원에 연결합니다.그러나 MongoLab의 단일 노드 설정은 실제로 단일 노드 복제본 세트이므로 신뢰할 수 없습니다.연결 문자열에 ?connect="Set"을 추가하면 드라이버가 복제 세트 모드로 전환되고 모든 것이 작동합니다.
아래와 같이 연결 문자열 방식을 교체합니다.
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name")
이제 해결되었습니다.
폴 렘케의 답변을 봐주세요.
현재 IP 주소가 mongodb 서버에 화이트리스트에 있는지 확인합니다.인터넷 공급자를 변경하는 경우 새 IP를 화이트리스트에 추가해야 합니다.
인증 데이터베이스가 올바르게 설정되어 있는지 확인합니다.
연결하고 싶은 DB만 언급했을 때 이 문제가 발생했고 (admin db가 아닌) 제 인증 db가 다릅니다.
이 줄의 db-name은 인증 DB로 간주됩니다.
new MongoClient("mongodb://username:password@ds011111.mongolab.com:11111/db-name?connect=replicaSet")
그런 다음 선택한 DB를 나중에 변경할 수 있습니다.
mDb = mClient.GetDatabase(mongoDBName);
MongoLabs 배포에서 동일한 오류 메시지가 발생하지 않았습니다.
방금 제목에 나와 있는 것과 같은 오류가 Asp로 발생했습니다.NetCore 앱.저의 문제는 IOC 구성 문제 때문이었습니다.
내 IOC 컨테이너에서, 내 랩된 MongoClient 인스턴스는 종속성 임시 라이프스타일로 구성되었습니다.
MongoDb C# 드라이버별:
MongoClient 인스턴스는 정적 변수로 저장하거나 수명이 1톤인 IoC 컨테이너에 저장하는 것이 좋습니다.
저는 제 물건의 라이프스타일을 싱글톤으로 홍보했고 그것이 문제를 해결했습니다.
사용 중:
- .Net Core 2.0
- Mongo C# 드라이버 버전 2.5
- 내 IOC 버전 3.3.0용 캐슬 윈저
C# 드라이버 클라이언트 섹션을 참조하십시오. http://mongodb.github.io/mongo-csharp-driver/2.5/reference/driver/connecting/ #reuse
데이터베이스 사용자 이름도 대소문자를 구분해야 합니다.사용자 이름의 대소문자 구분 때문에 이 문제에 부딪혔습니다.
MongoDB 연결 오류와 관련이 있습니다.권한이 없거나 MongoDB에서 허용된 IP를 지정하지 않았을 수 있습니다.예를 들어 MongoDB Composure에서 MongoDB Atlas와 연결할 수 있는지 확인하십시오.연결할 수 없는 경우 MongoDB 연결 문자열이 잘못되었음을 의미합니다.
저도 같은 문제가 있었습니다.MongoDb Compass를 사용하여 MongoDB Atlas에 연결할 수 있었지만 C# 프로젝트에서 동일한 연결 문자열을 사용하여 "CompositeServerSelector... ---> System을 사용하여 서버를 선택한 후 30000ms 후에 시간 초과가 발생했습니다.넷. 내부.소켓 예외 팩토리+확장 소켓 예외(61): 192.168.1.254:53" 연결이 거부되었습니다.
저의 경우, 문제는 제 인터넷 공급자 라우터로 인해 발생했습니다.제 아이폰의 4G 핫스팟으로 연결을 바꾸니 연결 문제가 해결되었습니다.
포트 10255가 인터넷 공급자/방화벽 규칙에 의해 차단되었습니다.클라이언트 측에서 이 포트를 열면 문제가 해결되었습니다.
내 경우에는 응용프로그램을 실행하려고 할 때docker compose
저는 환경 변수를 잊어버립니다.올바른 환경 변수를 추가하여 문제를 해결했습니다.
이 문제가 발생하여 데이터베이스 서버가 2시간 늦어진 것으로 나타났습니다.일단 시간을 정하자 타임아웃 문제가 해결되었습니다.
언급URL : https://stackoverflow.com/questions/31314245/a-timeout-occured-after-30000ms-selecting-a-server-using-compositeserverselector
'programing' 카테고리의 다른 글
Windows에서 github/git Checkout이 '오류: 잘못된 경로'를 반환합니다. (0) | 2023.08.09 |
---|---|
쉼표 연산자(c) (0) | 2023.08.09 |
데이터베이스에서 실행 중인 예약된 작업을 나열하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
JNI 대 유고 인민군 경기력 (0) | 2023.08.09 |
Oracle DB 및 .NET 사용 시 모범 사례 (0) | 2023.08.09 |