出力の設計上の制限がありsgen
ます。この制限は取り除かれませんでした:
これらの生成されたアセンブリは、Web サービスのサーバー側では使用できません。このツールは、Web サービス クライアントおよび手動シリアル化シナリオ専用です。
sgen
基本的に、Web サービスのサーバー側を高速化するために実行することは期待されていませんXmlSerializer
。これは、(一部の種類のクライアントとは対照的に) 起動時間はパフォーマンスの重要な要素ではないためです。
もちろん、のコンストラクターに何も渡さない限り、Web サービス以外のシナリオでサーバー側で使用sgen
できます。XmlAttributeOverrides
XmlSerializer
MSMQ では、バイナリと XML のシリアル化の選択肢があり、ここではコードで後者を選択します。
qOrders.Formatter = New XmlMessageFormatter(New Type() {GetType(InfoMessage)})
MessageQueue
それでは、を作成する方法を見てみましょうXmlSerializer
。以下は、.NET 4.0XmlMessageFormatter
から取った方法です。System.Messaging.dll
対応する .NET 2.0 も同様です。
private void CreateTargetSerializerTable()
{
if (!this.typeNamesAdded)
{
for (int index = 0; index < this.targetTypeNames.Length; ++index)
{
Type type = Type.GetType(this.targetTypeNames[index], true);
if (type != (Type) null)
this.targetSerializerTable[(object) type]
= (object)new XmlSerializer(type);
}
this.typeNamesAdded = true;
}
if (!this.typesAdded)
{
for (int index = 0; index < this.targetTypes.Length; ++index)
this.targetSerializerTable[(object) this.targetTypes[index]]
= (object)new XmlSerializer(this.targetTypes[index]);
this.typesAdded = true;
}
if (this.targetSerializerTable.Count == 0)
throw new InvalidOperationException(Res.GetString("TypeListMissing"));
}
ご覧のとおりXmlAttributeOverrides
、フレームワーク内の Web サービス サーバー側コードとは異なり、MSMQ は を提供しません。それでも、XmlMessageFormatterとsgen
.
私の推測では、sgen
MSMQ は を使用しないため、引き続き MSMQ で動作XmlAttributeOverrides
させることができますが、proxytypes
コマンド ライン オプションを使用していないこと、および Microsoft がこれまでにテストした範囲外に移動していることを確認する必要があります。
これらの可能性を検討することをお勧めします。
sgen
MSMQ との併用は避けてください。
/proxytypes
オプションと一緒に使用しないでくださいsgen
。
- プロジェクト ファイルから
SGenUseProxyTypes
呼び出す場合は無効にします (方法については、こちらを参照してください)。sgen
- MSMQ でのバイナリ シリアル化の使用を検討してください。
- クライアント側のキューを介して送信するタイプに細心の注意を払ってください。