17

私のasp.net WebページはIIS Webサーバー上にあり、基本的なHTTPバインディングを使用してWCFサービス(Windows 2008アプリサーバー上にある)と通信します。私の wcf サービスのパフォーマンスはそれほど良くないようで、同じように改善したいと考えています。また、サイトのトラフィックが非常に多いため、スケーラビリティのバランスをとる必要があります。

HTTP 圧縮、スロットリングは、認識している方法の一部ですが、まだ試していません..protobuf API を使用できますか...提案してください...

4

3 に答える 3

28

簡単な答えは「はい」です...

プロトコルバッファ仕様自体はRPCスタックを提供しませんが、仕様外に追加されたものもあります。

まず、protobuf-netにはWCFのフックがあり、サービスコントラクトの操作をとしてマークできますProtoBehavior。次に、これは通常のスワップDataContractSerializerを使用してprotobuf-netシリアル化を使用します。ただし、いくつかの注意点があります。

  • データメンバーは明示的な順序(例[ProtoMember(Order = 1)])を持っている必要があります。これは、これらの数値をフィールド識別子として使用するためです(プロトコルバッファは数値フィールドを使用します)
  • このカスタム動作は「mex」で公開されていないため、(サービスコントラクトなどの)アセンブリ/クラス共有で最適に機能します。

基本的なhttpトランスポートと一緒に使用すると、これはMTOM(有効になっている場合)とも互換性があり、最大のスループットが得られます。重要なメッセージのパフォーマンスは、そのサイズに大きく比例します。ここでprotobuf-netのサイズのアイデアを得ることができます。

または、特注のRPCスタックにも取り組んでいます。現在のビルドにはhttp上で機能するスタックがありますが、機会があれば生のTCP/IPでも有効にする予定です。私はまだそれを書く機会がありませんでした、しかし私は要求に応じて例を提供することができます。これを最も便利に使用するには、3.5の「拡張機能」dllも必要になることに注意してください。

ご不明な点がございましたら、コメントを追加するか、私にメールしてください(私のプロフィールを参照してください)。

于 2009-04-26T12:05:36.230 に答える
2

WCF サービスを内部ネットワークの外部に公開する必要がない場合は、TCP ベースのバインドを使用することも検討できます。

于 2009-04-25T22:24:10.383 に答える
0

protobuf-netを参照してください。

protobuf-net はこれの .NET 実装であり、.NET オブジェクトを効率的かつ簡単にシリアル化できます。.NET 2.0/3.0/3.5、.NET CF 2.0/3.5、Mono 2.x、Silverlight 2 など、ほとんどの .NET ファミリと互換性があります。

于 2009-04-25T22:13:43.483 に答える