2011-03-04 9 views
1

私はLdapConnectionを使用してAD LDS(以前はADAM)データストアに対するリクエストを作成しているという点で問題があります。ファイン。しかし、現在では、これを「遠隔から」行うことができるようになってきています。基本的に、データストアへのアクセスを常に期待しているプログラムは、「内部」ネットワーク上の「サーバー」プログラムを使用して実行する必要があります。そのため、外部の「クライアント」は、プログラム。 AD LDSサーバーを外部に公開するだけの理由がありません(理由はありませんが、理由はあります)。しかし、彼らはそれが "速く"実行されることを望んでいるので、本当に起こっているはずのように、クライアントアプリケーションを再エンジニアリングする必要はありません。したがって、「サーバー」部分との間で移動するには、DataRequestDataResponseをシリアル化する必要があります。LdapConnectionから.NETタイプをシリアライズ

大きな問題:DataResponsesはシリアル化可能ではないようです。

System.Runtime.Serialization.InvalidDataContractException occurred 
    Message="Type 'System.DirectoryServices.Protocols.SearchResponse' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. See the Microsoft .NET Framework documentation for other supported types." 
    Source="System.Runtime.Serialization" 
    StackTrace: 
     at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type) 
    InnerException: 

OK:テスト中に、DataContractSerializerは私のSearchRequestが、SearchResponseがこれを取得するのシリアライズ問題ありません。しかしいずれのタイプもSerializableではない。では、SearchRequestはプロセスを正常に通過するのはなぜですか。応答はありません。

しかし、それは最終的に問題ではありません。 .NETフレームワークに組み込まれているので、変更できない型をシリアル化する必要があります。コンストラクタは内部的なため再作成できません。 「必要な情報を取得して」ネットワーク接続のもう一方の側でクラスを再作成できるのであれば、私はそうしますが、これらのタイプにはパブリックコンストラクタがありません。

アイデア?私は、どちらか一方のタイプが "DataContractSerializer"の正しい属性がなくても "ちょうどうまくいく"が、もう一方はそうでない理由を知りたいと思っています。

答えて

2

あなた自身のラッパークラスを作成し、その結果を読み込んでクラスに格納してシリアル化することが、おそらく唯一のアプローチです。

SearchResponseは実際にはCOMラッパーであり、シリアル化することはできません。

+0

残念ながら、これは 'DirectoryResponse'とその実際のサブクラスを期待している既存のコードのためにはうまくいきません。そして、いいえ、そのコードは変更できません。私はむしろ大きな枠組みの中で働いており、そのように制約されています。 –

+0

私は本質的にこれをしなければならず、私たちのフレームワークで約12のクラスについて触れなければなりませんでした。私は何をしたいのではなく、これが本質的に何か起こったとあなたに信じていました。 –

+0

ありがとうございます。私はあなたの質問を既にアップしていました。 – Aliostad

関連する問題