1

問題: リフレクションを介してメソッドを呼び出し、結果を送信する WCF サービスがあります。そのようです:

[OperationContract] Object InvokeMemberByReflection(string typeName, string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args);

これを行うのは、呼び出したい既存の API X があるためです。すべてのメソッドのラッパーを書きたくありません。

サーバーとクライアントの両方が同じ dll セットを参照するため、明示的な DataContract も使用しません。

ただし、上記の InvokeMemberByReflection メソッドの場合、メソッド パラメーターを型オブジェクトの配列として送信しているため、DataContractSerializer が機能するには、API X のすべての可能なメソッド シグネチャを KnownTypeAttributes として追加する必要があるようです。

これに対する回避策はありますか?CLR は基本的に、オブジェクト配列に含まれる要素の型を認識しています。これに基づいてシリアライズ/デシリアライズすることはできませんか(すべて一緒に異なるタイプであることを認めます)?

また、このような問題に対処するための他のパタ​​ーンをいただければ幸いです。反射は明らかな理由で遅すぎます。

4

1 に答える 1

2

クライアントとサーバーが同じ DLL を使用している (つまり、型がまったく同じ) 場合はNetDataContractSerializer、既知の型属性を必要としない を使用できます (シリアライズ時に CLR 型情報を出力します)。この投稿には、そのシリアライザーの使用方法の例があります。

于 2012-05-24T02:07:16.650 に答える