2017-11-13 2 views
1

저는 ASP.NET Core 2.0 (한 달 전에 1.1에서 업그레이드 됨)을 사용하여 웹 사이트를 구축하고 있습니다. MongoDB는 AWS의 Mongo Atlas에서도 호스팅됩니다.이 MongoDB 인스턴스에는 3 개의 복제본 세트가 있으며 SSL 연결이 필요하며 이미 모든 IP에서 액세스 할 수 있습니다.Linux에서 실행되는 .NET 코어를 사용할 때 MongoDB에 연결하지 못했습니다.

내 컴퓨터 (Windows 10 x64) 및 AWS (Windows Server 2016)에서 제대로 실행됩니다.

난 후, 나는 내 사이트를 실행하려고 우분투 서버 16.04에 dotnet-runtime-2.0.0를 설치하는 APT 사용, 리눅스 머신에 배포하려고하고

을 다음과 같은 오류가 발생했습니다 (보안 이유로 나는 정확한 서버 도메인 이름을 숨기기)
System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = WritableServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-00-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-00-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.. 

나머지 복제 세트에 대해 동일한 오류가 두 개 있습니다.

하지만 MongoDB 쉘로 MongoDB 서버에 성공적으로 연결할 수 있습니다. 동일한 컴퓨터를 사용하십시오.

우분투에서 일부 종속성이 누락되었거나 MongoDB .NET SDK에 버그가 있습니까?

전체 스택 트레이스 :

System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = WritableServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-00-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-00-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.. 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply) 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
    --- End of inner exception stack trace --- 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-01-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-01-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.. 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply) 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
    --- End of inner exception stack trace --- 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/*****-shard-00-02-*****.mongodb.net:27017" }", EndPoint: "Unspecified/*****-shard-00-02-*****.mongodb.net:27017", State: "Disconnected", Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> MongoDB.Driver.MongoCommandException: Command isMaster failed: no SNI name sent, make sure using a MongoDB 3.4+ driver/shell.. 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply) 
    at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.<ExecuteAsync>d__11.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.ConnectionInitializer.<InitializeConnectionAsync>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
    --- End of inner exception stack trace --- 
    at MongoDB.Driver.Core.Connections.BinaryConnection.<OpenHelperAsync>d__48.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at MongoDB.Driver.Core.Servers.ServerMonitor.<HeartbeatAsync>d__27.MoveNext()" }] }. 
    at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description) 
    at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask) 
    at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChanged(IServerSelector selector, ClusterDescription description, Task descriptionChangedTask, TimeSpan timeout, CancellationToken cancellationToken) 
    at MongoDB.Driver.Core.Clusters.Cluster.SelectServer(IServerSelector selector, CancellationToken cancellationToken) 
    at MongoDB.Driver.Core.Bindings.WritableServerBinding.GetWriteChannelSource(CancellationToken cancellationToken) 
    at MongoDB.Driver.Core.Operations.CreateIndexesOperation.Execute(IWriteBinding binding, CancellationToken cancellationToken) 
    at MongoDB.Driver.OperationExecutor.ExecuteWriteOperation[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken) 
    at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperation[TResult](IWriteOperation`1 operation, CancellationToken cancellationToken) 
    at MongoDB.Driver.MongoCollectionImpl`1.MongoIndexManager.CreateMany(IEnumerable`1 models, CancellationToken cancellationToken) 
    at MongoDB.Driver.MongoIndexManagerBase`1.CreateOne(IndexKeysDefinition`1 keys, CreateIndexOptions options, CancellationToken cancellationToken) 
+0

이 부분은'명령 isMaster failed : SNI 이름을 보내지 않았습니다'는 전송하는 연결 문자열이나 복제 세트 설정에 문제가 있음을 알려줍니다. Altas를 호스팅하고 웹 사이트 도구를 사용하여 복제본 세트를 직접 배포하지 않고 배포하는 경우 연결 문자열 일 가능성이 큽니다. 자신의 복제 세트 구성을 수행하고 대신 수동으로 구성원과 구성을 추가하면 잠재적 인 문제점이 될 수 있습니다. "공용"IP 주소를 사용하거나 해당 호스트에 대해 DNS에서 할당 된 이름을보다 구체적으로 지정해야합니다. –

+0

어떤 경우에도 코드 및/또는 복제 세트 구성에 사용중인 연결 문자열을 나타낼 수있는만큼 적용하거나 실제로 적용 할 수있는 코드를 제공해야합니다. Latter는 임의의 멤버 인스턴스에 연결된 mongo 쉘을 사용하여'rs.config()'에서 얻을 수 있습니다. –

+0

@ NeeLunn 답장을 보내 주셔서 감사합니다. 내가 설명 할 필요가있는 것은 Mongo Atlas가 관리되는 MongoDB 공식 서비스이고 "rc.config()"명령을 실행할 특권이 없다는 것입니다. 그리고 가장 유선 부분은 Windows와 Windows Server에서 완벽하게 실행되는이 프로젝트이지만 Linux에서는 잘못되었습니다. 그러나 프로젝트에서 동일한 MongoDB 연결 문자열을 사용하여 Linux의 MongoDB 명령 줄 도구로 명령을 연결하고 실행할 수 있습니다. – YankeeYu

답변

3

.NET 핵심 라이브러리는 리눅스와 OSX에 SNI TLS 확장을 지원하지 않습니다.

따라서 무료 Tier MongoDB Atlas에 연결할 수 없습니다.

https://docs.atlas.mongodb.com/driver-connection/#c-net-driver-example

중요 .NET 핵심 라이브러리는 리눅스와 OSX에 SNI TLS 확장 을 지원하지 않습니다

. 이러한 작동중인 시스템에서 .NET 코어를 사용하는 응용 프로그램은 Atlas Free Tier 클러스터에 연결할 수 없습니다.

문제는 dotnet/corefx github page에서 추적됩니다.

관련 문제