Windows 10 Enterprise DELLタブレットにサイドロードするWindows 8.1 Storeアプリケーションがあります。このアプリケーションは、リモートサーバーにインストールされたASP.NET Web APIを介してリポジトリからのデータを使用します。 Web APIは、Windows認証を使用するように構成されています。 Fiddlerを使用してWeb API呼び出しを行うと、NTLMネゴシエーションのいくつかの手順を見ることができます。401.2 HTTPエラーメッセージは、HTTP 200 Okの前に2回返されます。Windows 8.1アプリケーションでWindows認証に必要なNTLMネゴシエーションが行われない
しかし、私のアプリケーションは401.1を取得し、それ以外は何もしません。私のアプリケーションのパッケージマニフェストでは、必要な機能のリストの[エンタープライズ認証]チェックボックスをオンにしました。また、Visual Studio Simulatorでテストしたところ、開発マシン上でネゴシエーションが行われ、Web APIが自分の呼び出しに適切に応答しました。バックグラウンドで自動的に行わNTLMネゴシエーションを持つために
は、私も行われる必要があることすべてはHttpClientHandlerオブジェクトは、このように構成していることです。そして、
var webApiAuthClientHandler = new HttpClientHandler()
{
Credentials = CredentialCache.DefaultNetworkCredentials,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
は、このHttpClientHandlerオブジェクトが渡されます
var webApiHttpClient = new HttpClient(webApiAuthClientHandler)
{
BaseAddress = new Uri(_myWebApiUri, UriKind.Absolute),
Timeout = new TimeSpan(0, 0, 150)
};
何が欠けていますか?Web API呼び出しを行うために使用されるHttpClientオブジェクトのコンストラクタで私のアプリが自動的にバックグラウンドで認証をネゴシエートし、GetAsync呼び出しが必要なHTTPコード200を返すようにするにはどうすればよいですか?
どのような提案も高く評価されます。 TIA、 エディ
Mattew、残念ながらマージされたMSDNに関する2つの質問がありました。ただ1つだけ答えられました。上に挙げたもう1つはまだ答えられていません。だから、上記のような現象がなぜ起こっているのか誰かが知っているなら、私はその解決策を聞いてみたいです。 – Eddie
誰もが理解できるように、最初の問題はGetAsyncによってスローされた例外でした。この例外の内部メッセージは、「接続先が一定期間後に正しく応答しなかったために接続が失敗したか、接続されたホストが127.0.0.1:8888に応答しなかったため接続が失敗しました。このエラーメッセージは、Fiddlerが自分のアプリをテストしようとしていたタブレットでも実行されていたことが原因であることがわかりました。フィドラーが停止した後、私はこの質問の本文に記述されている行動を得ました。 – Eddie