現在、WCFサービスをIIS6からIIS7に移行しています。このサービスには、内部ストリーミングを目的とした非SSLエンドポイントと、SSLで保護された公開エンドポイントが含まれています。
パブリックで安全なエンドポイントは、wsHttpBindingとsecurity mode="TransportWithMessageCredential"を使用して実装されます。バインディングは次のようになります。
<wsHttpBinding>
<binding name="CustomSecurityBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
資格情報は、検証のためにカスタムユーザーリポジトリに対して認証されます。
サービスをIIS7(64ビットWin2k8)に展開した後、すべてのサービス(basicHttpBindings)は正しく応答し、wsHttpBindingsを期待します。httpsを使用してトリガーされた場合、常にHTTP 400ステータスコード(不正なリクエスト)を取得します。
IISでトレースを有効にした後、トレースからのメッセージは実際には役に立ちませんでしたが、問題を少し絞り込むことができました。
MODULE_SET_RESPONSE_ERROR_STATUS Warning
ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER",
HttpStatus="400", HttpReason="Bad Request", HttpSubStatus="0", ErrorCode="Der
Vorgang wurde erfolgreich beendet. (0x0)", ConfigExceptionInfo=""
これまでに行った手順:
- IIS 7に再インストールされたWCF拡張機能(ServiceModelReg.exe -r -y)
- ホストに対してhttpsプロトコルを有効にし、ホストに自己署名証明書を追加しました
- wcf構成でDNS/ID設定を試してみました
- wcfserviceconfigにベースアドレスを追加しました
2時間グーグルしてこの作業を試みた後、最後の手段としてあなたにお願いします。IIS7のこの奇妙な動作を知っている人はいますか?