2012-03-14 17 views
0

Dotfuscatorを使用してWCFプロキシクラスを難読化する方法はありますか? 自分のウェブサイトからDotfuscator Pro Edition Trialをダウンロードしました。私はapp.exeファイルを難読化しましたが、すべてがうまく難読化されましたが、WCFプロキシクラスはそうではありませんでした。 (私はexeをILDASしました)。WCFプロキシクラスを難読化する

WCFプロキシクラスは、私のアプリケーションの構造を譲り渡しています。Dotfuscatorアプリケーションには何も設定されていませんか?

WCFサービスプロキシクラスを非表示にする良い方法はありますか?

答えて

1

WCFは、サービスのデータコントラクトの要素をクライアントのプロキシクラスにバインドできなければなりません。通常はプロキシクラスとそのメンバーを難読化する価値はほとんどありませんが、難読化したい場合は、または[DataMember]の属性(例:[DataMember Name="ID"])のNameパラメータを使用して明示的にタイプとメンバーの名前を設定できます。これを実行したら、[名前を変更 - >組み込みルール]タブで[シリアライズ可能な組み込みの型とフィールド]組み込みルールを無効にして、[名前変更 - >オプション]で[XMLシリアライザとの互換性]タブ。このアプローチの注意点は、シリアライズされたプロパティの名前がコード内(アトリビュート内)にまだ含まれており、引き続きワイヤを介して送信されることです。

サービスとクライアントの両方を管理する必要がある場合は、サービス契約を独自のアセンブリに入れて、Dotfuscatorで処理することもできます。ここでも、[名前を変更 - >組み込みルール]タブから[シリアライズ可能な組み込みの型とフィールド]組み込みルールを無効にし、[名前の変更 - >オプション]タブで[XMLシリアライザとの互換性]が選択されていることを確認します。結果のサービス契約DLLをサービスとクライアントアプリケーションの両方から参照します。このアプローチとのトレードオフは、契約メンバー全員が難読化された名前(例:「a」)を持ち、サービスとクライアントアプリケーションのコードでそれらを参照する必要があるということです。名前を変更した名前を理解するために、Dotfuscatorが生成するマップファイルを調べることができます。

+0

私はサービスとクライアントの両方を制御できます。あなたが指摘しているように、サービスを難読化し、私のコードを参照することは将来的にメンテナンスの問題を抱えます。私は同時に両方を難読化することができますDotfuscatorのオプションがありますか?そのようにして、私はサービスとクライアントをリリースしてから一緒に難読化します。 – Hakim

+0

その場合、サービスバイナリ、データコントラクトDLL、クライアントバイナリを同じDotfuscatorプロジェクトに追加することができます。 Dotfuscatorが契約のメンバの名前を変更するように、datacontract/datamember属性にNameプロパティを設定しないでください。次に、難読化された契約DLLをサーバーとクライアントの両方のバイナリに含めてください。 – bsiegel

+0

_ "MyClassはSystem.Runtime.Serialization.DataContractAttributeで装飾されています"と言っているので、クラスを難読化していません。_ – Hakim