底层连接已关闭 - API端点调用失败

时间:2016-07-26 20:53:31

标签: c# .net sockets https fiddler

我正在尝试确定在使用HTTPS而不是来自Windows Server 2012 R2的HTTP时,对Restful API端点的调用失败的原因。当我在笔记本电脑上本地运行应用程序时,同样的HTTPS调用(Windows 7)。

不幸的是,我无法让Fiddler将Web服务器上的应用程序调用显示给API。 AppContainer Loopback Exemption Utility错误尝试枚举AppContainers列表。服务器也被组策略锁定,因此我无法关闭防火墙以尝试解决Fiddler问题。

对API的调用是:

public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request)
{
  client = new HttpClient();

  // removed code for setting ignoreCertErrors and environmentName

  if (ignoreCertErrors && environmentName.ToUpper() != "PROD")
            {
                ServicePointManager.ServerCertificateValidationCallback =    delegate { return true; };
            }

  return client.SendAsync(request);
}

收到的错误:

  

=============================================== ==================   消息:基础连接已关闭:意外错误   在发送时发生。堆栈跟踪:
  在System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
  在System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResultar)

     

=============================================== ==================   消息:无法从传输连接读取数据:   远程主机强行关闭现有连接。堆   跟踪:
  在System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
  在System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)

     

=============================================== ==================   消息:远程主机强制关闭现有连接   堆栈跟踪:
  在System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
  在System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)

     

=============================================== ==================

如何获得更多细节?我正在尝试避免使用Wireshark等低级工具,我希望有选项跟踪/日志/捕获更多关于API失败的应用程序调用的详细信息。

更新 - 以下是失败时的跟踪信息:

  

System.Net信息:0:[2292] SecureChannel#49584532 ::。ctor(hostname = XX.XX.com,clientCertificates = 0,encryptionPolicy = RequireEncryption)

     

System.Net信息:0:[2292] SecureChannel#49584532 - 左边有0个客户端   证书可供选择。

     

System.Net信息:0:[2292]使用   缓存的凭证句柄。 System.Net信息:0:[2292]   InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY,context =(null),targetName = XX.XX.com,inFlags = ReplayDetect,SequenceDetect,Confidentiality,AllocateMemory,InitManualCredValidation)System.Net Information:0:[2292] InitializeSecurityContext(In-缓冲区长度= 0,Out-Buffer length = 178,返回代码= ContinueNeeded)。

     

System.Net.Sockets详细:0:[2292]套接字#14347911 :: BeginSend()

     

System.Net.Sockets详细:0:[2292]退出套接字#14347911 :: BeginSend() - &gt; OverlappedAsyncResult#19699911 System.Net.Sockets详细:0:[2292]   来自Socket#14347911 :: PostCompletion

的数据      

[已删除]

     

System.Net.Sockets详细:0:[2292]   插座#14347911 :: EndSend(OverlappedAsyncResult#19699911)

     

System.Net.Sockets详细:0:[2292]退出   套接字#14347911 :: EndSend() - &gt; Int32#178

     

System.Net.Sockets详细:0:[2292]套接字#14347911 :: BeginReceive()

     

System.Net.Sockets详细:0:[2292]退出套接字#14347911 :: BeginReceive() - &gt; OverlappedAsyncResult#2389992

     

System.Net.Sockets详细:0:[2292]   插座#14347911 :: EndReceive(OverlappedAsyncResult#2389992)

     

System.Net.Sockets错误:0:[2292]   套接字#14347911 :: UpdateStatusAfterSocketError() - ConnectionReset

     

System.Net.Sockets错误:0:[2292]例外情况   套接字#14347911 :: EndReceive - 强制存在连接   由远程主机关闭。 System.Net.Sockets详细:0:[2292]   退出套接字#14347911 :: EndReceive() - &gt; Int32#0

     

System.Net.Sockets详细:0:[2292]套接字#14

1 个答案:

答案 0 :(得分:0)

日志条目:

  

System.Net.Sockets错误:0:[2292]   套接字#14347911 :: UpdateStatusAfterSocketError() - ConnectionReset

是由阻止端口的防火墙引起的。添加新的防火墙规则后,问题就解决了。