System.Net.Sockets.SocketException (10060):连接尝试失败,因为连接方在一段时间后没有正确响应

Posted

技术标签:

【中文标题】System.Net.Sockets.SocketException (10060):连接尝试失败,因为连接方在一段时间后没有正确响应【英文标题】:System.Net.Sockets.SocketException (10060): A connection attempt failed because the connected party did not properly respond after a period of time 【发布时间】:2021-10-06 03:39:44 【问题描述】:

我有一个从我的网络应用程序调用休息服务的功能。我在 c#.net 代码中这样做

我的代码

using (var client = new HttpClient())
 
  client.DefaultRequestHeaders.Accept.Add(new 
 MediaTypeWithQualityHeaderValue("application/json"));

  var byteArray = Encoding.ASCII.GetBytes("abc:defg!");

  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

  client.DefaultRequestHeaders.Add("CSRF_NONCE", a.NonceValue);

   var message = await client.PostAsync("hostname/Windchill/servlet/odata/v3/ProdMgmt/Parts('OR:wt.part.WTPart:123456')/PTC.ProdMgmt.GetPartStructure?$expand=Components($select=PartName,PartNumber;$expand=PartUse($select=FindNumber,LineNumber,Quantity,Unit);$levels=1)", null);
  

    我可以从本地机器上成功调用它,但是当我在部署到测试服务器(Windows Server)后尝试调用它时,出现以下错误。

    System.Net.Http.HttpRequestException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。 ---> System.Net.Sockets.SocketException (10060):连接尝试失败,因为连接的一方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError 错误,CancellationToken cancelToken) 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 令牌) 在 System.Net.Sockets.Socket.g__WaitForConnectWithCancellation|283_0(AwaitableSocketAsyncEventArgs saea,ValueTask connectTask,CancellationToken cancelToken) 在 System.Net.Http.HttpConnectionPool.DefaultConnectAsync(SocketsHttpConnectionContext 上下文,CancellationToken cancelToken) 在 System.Net.Http.ConnectHelper.ConnectAsync(Func3 callback, DnsEndPoint endPoint, HttpRequestMessage requestMessage, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.ConnectHelper.ConnectAsync(Func3 回调,DnsEndPoint 端点,HttpRequestMessage requestMessage,CancellationToken cancelToken) 在 System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage 请求,布尔异步,CancellationToken 取消令牌) 在 System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔异步,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage 请求,HttpCompletionOption 完成选项,布尔异步,布尔 emitTelemetryStartStop,CancellationToken 取消令牌)

我尝试执行以下操作以使其正常运行,但没有任何效果。

    "A connection attempt failed because the connected party did not properly respond after a period of time" using WebClient

    在构造方法中添加以下代码

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

    我的测试服务器使用浏览器中的代理设置来访问其余服务 url。所以我尝试在我的代码中添加代理详细信息。

WebProxy 代理 = 新的 WebProxy 地址 = new Uri($"http://x.x.x.x:xxxx"), ; ServicePointManager.Expect100Continue = false; ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 |安全协议类型.Tls12; HttpClientHandler 客户端处理程序 = 新的 HttpClientHandler() AllowAutoRedirect = true, AutomaticDecompression = DecompressionMethods.Deflate |解压方法.GZip, 代理=代理, ; 使用 (var client = new HttpClient(clientHandler))

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

关键是看“10060”部分,即socket错误码WSAETIMEDOUT。

这表示 TCP 套接字无法连接,因为远程方没有响应。

检查主机名/端口是否正确,服务器是否在线,防火墙没有丢弃数据包等。

【讨论】:

感谢科里的回复。当您说主机名/端口时,它是其余服务主机名吗?如果是这样,我可以从我的本地机器浏览器成功访问它 您传入的网址。您有连接问题;是时候进行故障排除了。

以上是关于System.Net.Sockets.SocketException (10060):连接尝试失败,因为连接方在一段时间后没有正确响应的主要内容,如果未能解决你的问题,请参考以下文章

什么是使用 .NET 3.5 异步 System.Net.Sockets.Socket 停止数据流?

紧急求助,在传输数据时页面提示无法连接到远程服务器 System.Net.Sockets.SocketException

C# 客户端 Python 服务器:连接被拒绝

Shadowsocks用不了,求教是啥原因,如何解决?

在 C# 中获取套接字对象的流

.NET即时通信 WebSocket服务端实例