#sql #.net #vb.net #sockets #soap
#sql #.net #vb.net #сокеты #soap
Вопрос:
У меня есть служба SOAP, размещенная на веб-сервере (2012 R2). Эта служба SOAP вызывалась сервером SQL, и все работало нормально.
Я переместил эту службу SOAP на другой веб-сервер (2016). Теперь тот же самый вызов SQL server завершается с ошибкой, когда я использую «https». Хотя, все работает нормально, когда я использую «http»
Когда я отправляю вызов soap с помощью ARC-клиента на моем локальном компьютере с https, я получаю желаемый результат.
Моей службой SOAP является .NET framework 4.6.2 (уровень TLS на сервере поддерживает 1.1 и 1.2).
Дополнительная информация: Служба SOAP — это виртуальный сайт в родительском приложении.
Итак, https://sitename/servicename/mobileservice.asmx — Сбой http://sitename/servicename/mobileservice.asmx — Проходит
Пожалуйста, дайте мне знать, если кто-то столкнулся с подобной проблемой и мог бы выяснить, почему. Ниже приведена ошибка, которую я получаю
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
System.Net.Sockets.SocketException:
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
System.IO.IOException:
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.Pro
...
System.Net.WebException:
at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
Комментарии:
1. Я чувствую, что это потому, что они не могут договориться о шифровании
2. Да, вы правы. Я использовал wireshack для отслеживания соединения и обнаружил, что SQL server отправляет этот запрос с использованием TLS1.0, а на веб-сервере включен только TLS1.2. Хотя, когда я заставляю свой SQL server принудительно установить соединение TLS на 1.2, выдает ошибку «Клиент и сервер не могут взаимодействовать, поскольку у них нет общего алгоритма»
3. Я думаю, вам нужно добавить больше информации к вашему сообщению; даже не ясно, какая версия SQLS у вас есть или какие исправления были применены во имя того, чтобы заставить это работать