-3

COM オブジェクトを WCF サーバーに渡そうとしていますが、何を試しても次のエラーが発生し続けます。

型 'System.__ComObject' をシリアル化できません。これを DataContractAttribute 属性でマークし、シリアル化するすべてのメンバーを DataMemberAttribute 属性でマークすることを検討してください。サポートされているその他の型については、Microsoft .NET Framework のドキュメントを参照してください。

私が試してみましたServiceKnownType

[ServiceKnownType(typeof(ComClass))]

ラッピングしてみました

[DataContract]
public class receivedClass
{
  [DataMember]
  public ComClass controlClass { get; set; }
}

これをシリアル化して、WCF に送信できるようにすることはできますか? (私はこれを IPC プログラムに使用しています)

ああ、これはサードパーティが生成したCOMクラスです

4

2 に答える 2

3

COMオブジェクトは、基本的に、管理されていないメモリへのポインタにすぎません。.NETによって本質的にシリアル化することはできません。ただし、オブジェクトの状態をシリアル化し、WCFサービスでCOMオブジェクトの新しいオブジェクトインスタンスを作成してから、状態を復元することは可能です。自律情報を表すcomオブジェクトのプロパティは、シリアル化してサーバーに渡すことができます。ただし、オブジェクトが管理されていないオブジェクト(ハンドル、メモリポインターなど)のラッパーである場合、COMオブジェクトの状態を保存するのは非常に難しい場合があります。

于 2012-04-26T21:22:05.917 に答える
0

Microsoft DLR に同梱されている動的型と COM バインダーを試してみませんか。それがうまくいくと思います。これは、役に立つと思われる素敵な投稿です。 http://loosexaml.wordpress.com/2011/01/01/wcf-serialization-of-dlr-dynamic-types/

于 2012-04-26T21:08:47.653 に答える