1

バランスの取れた wcf サービスをロードするように対話する既存の asp.net アプリケーションがあります (iis がホストされ、servicePrincipalName として構成されたアカウントで実行されているアプリ プール内など)。wcf サービスはいくつかのカスタム エラーを返します。これらはすべて FaultContract(typeof(x), ProtectionLevel = ProtectionLevel.None) で定義されています。これらのサービスは公開されていません。クライアントは、「サービス参照」生成クラスを使用してサービスにアクセスします。

これは問題なく機能しましたが、最新のコード ベースでは、「プライマリ署名は暗号化する必要があります」というメッセージが表示されます。サービスがこれらの障害のいずれかを返したときに、クライアントで例外が発生します。サービス コードと構成は変更されていません (少なくとも、障害を生成する従来の部分)。クライアント側のサービス参照生成コードは、最も変更されているように見えます (多くの場合、削除されて再作成されます)。

セキュリティ構成は、1 年以上変更されていません。すべての更新はかなり最新です。これを 3 つの環境でテストしたところ、新しいコード ベースをデプロイするとすぐに、障害によって例外が生成され始めました。生成されたクラスに含まれている必要があるようですが、Visual Studio によって生成されるため、非常に困惑しています。

これは誰にとってもおなじみの音ですか?助言がありますか?

更新: ProtectionLevel 属性を削除してデフォルトに設定すると問題は解決しますが、None を指定すると失敗する理由が気になります。運用契約またはサービス契約のデフォルト レベルと競合する可能性がありますが、これらの値は過去 1 年間変更されていないため、現在機能していたものが機能しない理由を説明できません。

更新: このコード生成の変更は、2.0.50727.3053 と 2.0.50727.3082 の間に発生しました (生成されたコードのランタイム バージョン コメントによると)。

4

1 に答える 1

0

私自身はこの問題を経験していませんが、私の質問は次のとおりです。なぜ、障害契約で「ProtectionLevel = None」を指定するのですか?その特別な理由はありますか?

そうでない場合は、それをまったく指定しないことを強くお勧めします。デフォルトはProtectionLevel = EncryptAndSignであり、通常はこれが最善の策です。非常に強力で明確な理由がない限り、試してみてください。

マーク

于 2009-05-14T05:27:57.020 に答える