0

メッセージハンドラーを使用した基本認証を使用する自己ホスト型asp.net webapiサービスを開発しました(これに似ています: http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using -メッセージハンドラー/ )。ワークステーション (win 7 x64) からこれを実行すると、クライアントは期待どおりに消費します。意図したサーバー (win 2008) でこれを実行すると、クライアントはエラー コード 500 で失敗します。少し掘り下げてネットワーク トレースを行った後、(動作している) win 7 ボックスが最初に期待どおりに 401 で応答するように見えますが、win 2008 ボックスはまったく応答せず、接続をドロップするだけです (クライアントはこれを 500 と報告します)。

サーバーでリモート デバッグをセットアップしましたが、続行するスタック トラックすらありません。サーバー上のいくつかのコンポーネントが欠落していて、asp.net webapi コードのどこかで例外が発生しているように見えますが、確かなことはわかりません。

ここからどこへ行くべきかよくわかりません。私が考えることができる唯一の次のステップは、それに対して procmon を実行し、dll の「file-not-found」タイプのエントリが表示されるかどうかを確認することです。

4

1 に答える 1

0

より良いシンボル情報を取得できるように、asp.netWebスタックのナイトリービルドを使用するように切り替えました(http://blogs.msdn.com/b/henrikn/archive/2012/04/29/using-nightly-nuget-packages -with-asp-net-web-stack.aspx)。それで、.net Frameworkのデバッグをオンにすると、スローされていた実際の例外をキャプチャできました。

'WWW-Authenticate'ヘッダーを直接変更することはできません

それをグーグルで調べて、私はいくつかのリードを見つけました、そのうちの1つは私が解決策を得たhttp://wcf.codeplex.com/discussions/287534につながりました。基本的に、メッセージ処理ではなく、認証モジュールで認証を使用するように切り替えます。だからもっとこのように:

HttpSelfHostConfiguration config = new HttpSelfHostConfiguration("http://0.0.0.0:" + FaxCommon.SERVICE_PORT.ToString());
config.UserNamePasswordValidator = new AuthenticationProvider();

ここで、AuthenticationProviderはUserNamePasswordValidatorのサブクラスです

その後、コードはどこでも機能します。

于 2013-02-13T23:23:14.140 に答える