Windows 10 Enterprise タブレットで Windows 8.1 アプリケーションを実行しています。このアプリは、リモート サーバーで実行されている ASP.NET RESTful Web API を呼び出しています。Web API は Windows 認証を使用しています。タブレットには Fiddler がインストールされており、Web API を呼び出すことができるので、Web API が外部から利用できることを証明できます。
呼び出しを行うために使用するコードは次のとおりです。
if (WebApiAuthClientHandler == null)
{
WebApiAuthClientHandler = new HttpClientHandler()
{
Credentials = CredentialCache.DefaultNetworkCredentials,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
}
if (WebApiHttpClient == null)
{
WebApiHttpClient = new HttpClient(WebApiAuthClientHandler)
{
BaseAddress = new Uri(_serviceUri, UriKind.Absolute),
Timeout = new TimeSpan(0, 0, 150)
};
WebApiHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
HttpResponseMessage response = await WebApiHttpClient.GetAsync("api/user", HttpCompletionOption.ResponseContentRead).ConfigureAwait(continueOnCapturedContext: false);
var userLoginInfo = await response.Content.ReadAsAsync<UserLoginInformation>();
WebApiAuthClientHandler と WebApiHttpClient は、クラスの静的メンバーです。
_serviceUri はアプリの設定から構築され、「http://10.120.4.0:5000」のような適切にフォーマットされた絶対 URI になります。先ほど言ったように、Fiddler を使用して GET HTTP コマンドを URL " http://10.120.4.0:5000/api/user " に発行すると、タブレットで期待どおりの応答が得られます。
問題は、私の GetAsync 呼び出しが約 21 秒後に例外をスローすることです。ご覧のとおり、タイムアウトを 150 秒に設定しているため、タイムアウトではありません (長すぎることはわかっていますが、今のところ、すべての潜在的な原因を排除しようとしていました)。スローされた例外はタイプ HttpRequestException であり、いくつかのネストされたメッセージは、「接続されたパーティが一定期間後に適切に応答しなかったか、確立された接続が失敗したため、接続の試行が失敗したため、「リモートサーバーに接続できませんでした」ことを通知します接続されたホストが 127.0.0.1:8888 の応答に失敗したため」
適切なリモート URL アドレスを渡して、ローカルではなくリモートで Web API にアクセスしようとしているので、この最後の部分は本当に困惑します。
この問題は、2 週間近く私を悩ませてきましたが、まだ解決していません。どんな提案でも大歓迎です。
ティア、エディ