我正在尝试确定在使用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
答案 0 :(得分:0)
日志条目:
System.Net.Sockets错误:0:[2292] 套接字#14347911 :: UpdateStatusAfterSocketError() - ConnectionReset
是由阻止端口的防火墙引起的。添加新的防火墙规则后,问题就解决了。