2009-05-13 7 views
1

私は、バランスの取れたwcfサービス(iisがホストされ、アプリケーションプール内でservicePrincipalNameとして設定されたアカウントで実行されている、など)を話す既存のasp.netアプリケーションを持っています。 wcfサービスは、FaultContract(typeof(x)、ProtectionLevel = ProtectionLevel.None)で定義されたいくつかのカスタムフォールトを返します。これらのサービスは公開されません。クライアントは、サービス参照に生成されたクラスを使用してサービスにアクセスします。WCF「プライマリシグネチャを暗号化する必要があります。 FaultContract with ProtectionLevel.None

これはうまくいきましたが、最新のコードベースでは、「プライマリシグネチャを暗号化する必要があります」となっています。サービスがこれらの障害の1つを返すときにクライアント上の例外が発生します。サービスコードと構成は変更されません(少なくとも障害を生成するレガシーパーツ)。クライアント側のサービス参照生成コードが最も変更されたように見えます(しばしば削除されて再作成されます)。

セキュリティ設定は1年以上変更されていません。すべてのアップデートはかなり最新です。これを3つの環境でテストしました。新しいコードベースをデプロイするとすぐに、エラーが発生して例外が生成されます。生成されたクラスにあるように見えますが、Visual Studioによって生成されるため、非常に混乱しています。

誰にでも馴染みやすいですか?助言がありますか?

更新:ProtectionLevel属性を削除してデフォルトにすることで、問題は「消え去る」が発生しますが、Noneを指定すると失敗する原因が不思議です。おそらく、これは運用契約またはサービス契約のデフォルトレベルと競合しているかもしれませんが、これらの値は過去1年間で変更されていないため、今はうまくいかなかった理由が説明されていません。

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

答えて

0

私はこの問題を自分で経験していませんが、あなたのフォルト契約に「ProtectionLevel = None」を指定する理由は何ですか?それに対する特別な理由は何ですか?

もしそうでなければ、私はそれを全く指定しないことを強く推奨します - デフォルトはProtectionLevel = EncryptAndSignであり、それはたいていあなたの最善の策です。あなたがそれに対して非常に強く明確な理由がない限り、試してみてください。

マーク

+0

これは良い質問です。 2年前に、「他の当事者から保護されていない、または間違って保護されたフォルトが受信されました」というカスタムフォールトの問題に対応して行われました。保護レベルを「なし」に設定すると「元気になりました」というメッセージが表示され、内部サービスの仕組みを見て、オーバーヘッドを持たないというアイデアはOKと思われました。 WCFには新しく、WCFはとても新しく、期限を迎えていたので、うまくいきました。 – ongle

関連する問題