0

デフォルトのDataContractSerializationを採用しているWCFサービスがいくつかあります。一部のサービスメソッドはDictionaryオブジェクトを返します。クライアントの1つがWCFサービス(biztalk関連)からXSDファイルを生成しており、彼はすべてのディクショナリタイプをIXmlSerializableを実装する新しいディクショナリタイプに変換するように要求しています。DataContractのシリアル化に何らかの影響を与える可能性のある、この変換の予期しない結果があるのではないかと思います。

更新:サーバーとクライアントは同じドメインdllを共有し、クライアントはサービスからそれらを生成しません。たぶん、質問の中で私は要点を見逃していました。オブジェクトがデータコントラクトのシリアル化によってシリアル化されるのではないかと思います。オブジェクトにIXmlSerializableを実装すると、問題が発生します。

4

3 に答える 3

0

予期しない問題があります。ドメインオブジェクトはすでにデータコントラクトのシリアル化を実装しているため、シリアル化メカニズム全体を変更せずにIXmlSerializableを実装する方法はありません。

于 2012-07-07T10:54:06.047 に答える
0

クライアントはサービスとdllを共有していますか?

彼がライブラリ(dll)をサービスと共有していない限り、サービス側で変更を加えても違いはありません。WCFは、クラスではなくデータを返します。そのデータは、サービスが返すWSDLの定義に基づいてクライアントによって作成されるクラスに再構成されています。クライアントとサーバー間でdllを共有しない限り、生成されたライブラリを(サーバー上で変更を行うことによって)制御することはできません。

生成された辞書をIXmlSerializableディクショナリでラップしたい場合は可能です。または、別のタイプのディクショナリを生成したい場合は、おそらくそれも実行できますが、サーバー側で実行できることはないと思います。 。

于 2012-03-22T10:03:46.207 に答える
0

クライアントに、サービス呼び出しからの辞書の結果をシリアル化する必要がある場合は、次のシリアル化可能な辞書を使用するように指示します。C#シリアル化可能な辞書–実用的な例

コンストラクター引数として通常の辞書を受け入れるため、任意の辞書をシリアル化可能な辞書に変換します。SerializableDictionary必要に応じて、サービス呼び出しの結果としてタイプを返すこともできます。

于 2012-03-22T10:09:50.660 に答える