Windows Server 2012 R2のHTTPではなくHTTPSを使用する場合、Restful APIエンドポイントへの呼び出しが失敗する理由を特定しようとしています。私のラップトップ(Windows 7)でローカルにアプリケーションを実行すると、同じHTTPS呼び出しが機能します。基になる接続が閉じられました - APIエンドポイント呼び出しが失敗しました
残念ながら、Webサーバー上のアプリケーションからAPIへの呼び出しをFiddlerに表示させることはできません。 AppContainer Loopback Exemptionユーティリティ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);
}
エラーが受け取っ:
================================================================= Message: The underlying connection was closed: An unexpected error occurred on a send. Stack Trace:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResultar)================================================================= Message: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. Stack Trace:
at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)================================================================= Message: An existing connection was forcibly closed by the remote host Stack Trace:
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)=================================================================
をより詳細な情報を入手するにはどうすればよいですか?私は、Wiresharkのような低レベルのツールを避けようとしていますが、オプションのトレース/ログ/ APIへのアプリケーションコールの詳細については、失敗していると思われます。
UPDATE - それが失敗したときにここでは、トレース情報です:
System.Net Information: 0 : [2292] SecureChannel#49584532::.ctor(hostname=XX.XX.com, clientCertificates=0, encryptionPolicy=RequireEncryption)
System.Net Information: 0 : [2292] SecureChannel#49584532 - Left with 0 client certificates to choose from.
System.Net Information: 0 : [2292] Using the cached credential handle. System.Net Information: 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-Buffer length=0, Out-Buffer length=178, returned code=ContinueNeeded).
System.Net.Sockets Verbose: 0 : [2292] Socket#14347911::BeginSend()
System.Net.Sockets Verbose: 0 : [2292] Exiting Socket#14347911::BeginSend() -> OverlappedAsyncResult#19699911 System.Net.Sockets Verbose: 0 : [2292] Data from Socket#14347911::PostCompletion
[ Removed ]
System.Net.Sockets Verbose: 0 : [2292] Socket#14347911::EndSend(OverlappedAsyncResult#19699911)
System.Net.Sockets Verbose: 0 : [2292] Exiting Socket#14347911::EndSend() -> Int32#178
System.Net.Sockets Verbose: 0 : [2292] Socket#14347911::BeginReceive()
System.Net.Sockets Verbose: 0 : [2292] Exiting Socket#14347911::BeginReceive() -> OverlappedAsyncResult#2389992
System.Net.Sockets Verbose: 0 : [2292] Socket#14347911::EndReceive(OverlappedAsyncResult#2389992)
System.Net.Sockets Error: 0 : [2292] Socket#14347911::UpdateStatusAfterSocketError() - ConnectionReset
System.Net.Sockets Error: 0 : [2292] Exception in Socket#14347911::EndReceive - An existing connection was forcibly closed by the remote host. System.Net.Sockets Verbose: 0 : [2292] Exiting Socket#14347911::EndReceive() -> Int32#0
System.Net.Sockets Verbose: 0 : [2292] Socket#14
apiへの呼び出しが失敗する可能性があります。サーバーに接続するときは、通常はサーバー上のAPIを実行するための資格情報を持たないゲスト特権で実行しています。管理者権限で実行するには、apiをサーバーにインストールする必要があります。私が正しいことを確認するために、サーバーのイベントビューアーでエラーの詳細を確認します。 – jdweng
HTTPを使用するAPIへの同じ呼び出しが機能しますが、API URIを切り替えるとHTTPSが使用され、上記のエラーがスローされます。 – Josh
ヌル応答をテストしますか?根本的な原因はわかりませんが、空のパケットが出ている可能性があります。 – jdweng