現時点では、WCF でプリコンパイル済みモデルを使用する唯一の方法は、コードを使用して手動で WCF を構成することです。特に、ProtoOperationBehavior手動でモデルを追加して、モデルを指定します。
var behavior = new ProtoOperationBehavior();
behavior.Model = new MyPrecompiledSerializer();
私はそれを行う完全なエンドツーエンドの WCF の例を持っていないことを告白します。新しいリリースでは、構成を介してカスタムシリアライザータイプを微調整ProtoBehaviorExtensionおよび/またはProtoBehaviorAttribute指定できるようにする方が簡単かもしれないと思いますが、そのコードは今日存在しません。
当面の間、問題が最初の操作でのわずかな遅延である場合は、明示的に必要ないくつかの型をデフォルト モデルに追加してコンパイルすることもできます。
RuntimeTypeModel.Default.Add(typeof(Foo), true);
RuntimeTypeModel.Default.Add(typeof(Bar), true);
RuntimeTypeModel.Default.CompileInPlace();
とは言っても、コンパイルはそれほど遅くはありません -モデルが本当に複雑 (数百の型)でない限り、コンパイルが顕著な遅延を引き起こしている場合は少し驚かれることでしょう。遅延が WCF、ネットワーク、TCP などのオーバーヘッドだけである可能性はありますか?
に関してSolidBrush、そして暗黙のうちに: -実行時Colorにそれらを設定することが可能です:
RuntimeTypeModel.Default.Add(typeof(System.Windows.Media.Color), false)
.Add("R", "G", "B", "A");
RuntimeTypeModel.Default.Add(typeof(System.Windows.Media.SolidColorBrush), false)
.Add("Color");
ただし、「プリコンパイル」を使用するときにこれを行うためのメカニズムをまだ追加していません。技術レベルでははるかにトリッキーです。(たとえば) 属性に対して実行可能メソッドを使用することはできません。 precompile" は、任意の CLI (Silverlight、WinRT、.NET 1.1、CF など) 用であり、非常に異なるメカニズムによってロードされます。
私の好みのアプローチは次のとおりです。それを次のように公開しないでください- (最終的な実装ではなく)データSystem.Windows.Media.Colorを表す独自のDTOクラスを作成し、それらの間をマップします。または、モデルを構成してからorを呼び出すことにより、「プリコンパイル」のように機能する独自のユーティリティ コンソール exe を作成することもできます。RuntimeTypeModel.Default.Compile(string,string)RuntimeTypeModel.Default.Compile(CompilerOptions)