0

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 週間近く私を悩ませてきましたが、まだ解決していません。どんな提案でも大歓迎です。

ティア、エディ

4

0 に答える 0