1

WCF/Silverlight アプリケーションで protobuf-net を使用して、大きなオブジェクト配列のシリアル化のパフォーマンスを向上させようとしています。サービス コードでクラス (Order= などを追加) をシリアライズ/デシリアライズできます。

しかし、ProtoBehavior を適用して、Silverlight から protobuf 対応のサービス メソッドを呼び出そうとすると、データ (またはエラー) の代わりに null が返されます。

これは次の理由によると思います。

  1. ProtoBehavior は、Silverlight で生成されたサービス コードでは失われます。
  2. ドメイン クラス (型) は再利用されたアセンブリには含まれず、クライアントで再生成され、Order= が失われます。

ただし、現時点では両方の点を変更することはできません。(かなり大きな) プロジェクトをリファクタリングせずに protobuf-net を使用して、ASP.NET/Silverlight アセンブリをドメイン クラスなどと共有する方法はありますか?

他に解決策がない場合は、Reference.cs を調整して不足している動作と Order= を (perl/regex スクリプトを介して) 適切なメンバーに追加する方が簡単だと思いますが、正確には何を調整する必要があり、それは機能しますか?

4

1 に答える 1

1

に関しては、 Silverlightには、別のシリアライザーを WCFに静かに[ProtoBehavior]挿入するために使用できる拡張ポイントがまったくありません。これは苦痛です。現在Silverlightでこれを行う唯一の方法は、 aまたは a のいずれかをワイヤ上に投げて、両端でシリアライゼーション/デシリアライゼーションを処理することです。byte[]Stream

Re Order=...、内容を確認する価値があります。彼らが異なる数を考え出している場合、これを修正する方法がありますpartial class-醜いハックですが、IIRCにはクラスProtoPartialMemberに適用できる(または同様の)ものがありますが、個々のメンバー(プロパティ/フィールド)について話します. この方法で数値を修正できます。多数のフィールドがある場合にも役立つ( IIRC、申し訳ありませんが、コードはありません)もあります。Offset[ProtoContract]

v2 (リリースされていません) では、属性をいじる必要なく、順序付け (/フィールド番号) をより適切に制御できます。

于 2010-09-09T09:15:59.510 に答える