.net シリアル化可能なクライアント データを受け取る操作を持つ WCF サービスがあります。
[OperationContract]
void SaveMyData(long id, string name, object serializableData);
[OperationContract]
object LoadMyData(long id, string name);
サーバーはデータが何であるかを知る必要はなく、データを保存するか、保存されているものを返すだけです。また、サーバーはシリアル化される型を認識していないため、当然、このコントラクトによって逆シリアル化の例外が発生します。
たとえば、次のように、WCF コントラクトとは無関係にこれをシリアル化/逆シリアル化できることを知っています。
[OperationContract]
void SaveMyData(long id, string name, byte[] serializedData);
[OperationContract]
byte[] LoadMyData(long id, string name);
ただし、これには、シリアル化および逆シリアル化するために、クライアントに追加のコードが必要です。私はそれを避け、クライアント コードをできるだけシンプルにしたいと考えています。
WCF 呼び出しをラップし、追加のシリアル化/逆シリアル化を実行するクライアント dll にビルド前のプロキシを作成できることはわかっています。しかし、WSDL から生成されたクライアントに依存できるようにしたいと考えています。
理想的には、RawAttribute
(ユニバーサル ルート タイプの) シリアライゼーション/デシリアライゼーションを抑制しobject
、代わりに操作から (オブジェクト)byte[] (または (オブジェクト)Stream?) を提供または期待するパラメーターまたは戻り値に a を配置できます。
[OperationBehavior]
public void SaveMyData(long id, string name, [Raw] object serializableData){ ... }
[OperationContract, Raw]
object LoadMyData(long id, string name);
私は見てきましたがDataContractSurrogate
、DataContractResolver
これを達成する方法がわかりません。DataContractSurrogate
タイプと逆シリアル化されたオブジェクトが既に提供されているため、逆シリアル化パイプラインでは遅すぎるようです。リゾルバーはデータを提供せず、型情報のみを提供します。どちらも、RawAttribute
.
WCF はこれに対して適切な拡張ポイントを提供していますか? それとも組み込みの方法ですか?
また、シリアル化されたデータから抽出された宣言された型が何であるかを知りたいのですが、それは必要ありません。
ありがとう!