2

現在の実装

SQL Server 2005 データベースには、xml 型の MessageXml という列を持つ、messages というテーブルがあります。

XElement 型の MessageXml というフィールドを持つ Message というクラスを生成する Linq to Sql クラスを含む C# ライブラリ プロジェクト。

XElement 型の MessageXml というプロパティを持つ MessagePayload クラスを公開する WCF Web サービス。

Web サービスは、Linq によって作成された Message クラスを SQL に提供しません。その中間として軽量のオブジェクトを使用します。

質問

XElement は本当に WCF サービスで使用したい型ですか、それともより良い型がありますか。サービスに渡す予定の xml は、完全なドキュメントである必要があります。また、xml ドキュメントを XElement としてロードするのに少し問題があります。サービスの軽量クラスで完全な xml ドキュメント タイプを公開する必要があると思いますが、XDocument と XmlDocument の違いについて少し混乱しています。

その上、シリアル化できない XDeclaration 型のプロパティが含まれているため、XDocument 型のプロパティを持つ WCF Message クラスを公開できません。

XmlDocument を使用する場合、Linq クラスと軽量クラスの間の変換で、xml 型のこの奇妙な変換を行う必要があります。

 XmlDocument doc = new XmlDocument();
 doc.LoadXml(message.MessageXml.ToString());

 MessageEnvelope retVal = new MessageEnvelope()
 {
      MessageXml = doc,
 };

XmlDocument は正しいもののように思えます。翻訳を行う必要があることはわかっていますが、可能な限り適切に近づけたいと考えています。

4

4 に答える 4

3

ジョン・サンダースはここでお金を稼いでいます。XmlElement少し詳しく説明すると、 またはを返したときに生成される WSDL を見ると、次のようになりXElementます。

<xs:complexType>
  <xs:sequence>
    <xs:any minOccurs="0" processContents="lax"/>
  </xs:sequence>
</xs:complexType>

それでおしまい。これは基本的に、任意の XML をここに入れることができることを意味します。また、Chansik の提案に反して、戻り値の型を .NET 固有の型にバインドしないことも意味します。

ええ、文字列を使用する必要はありません。

于 2009-12-10T00:19:26.720 に答える
3

XElement または XmlElement のいずれかを使用できます。

public XmlElement GetXmlElement()
{
    var doc = new XmlDocument();
    doc.Load(PREFIX + @"Enumerations.wsdl");

    return doc.DocumentElement;
}

public XElement GetXElement()
{
    var doc = XDocument.Load(PREFIX + @"Enumerations.wsdl");
    return doc.Root;
}

どちらXDocumentも必要ありませんXmlDocument。返されるものはすべて、SOAP エンベロープを含む XML ドキュメントの真ん中にあることに注意してください。ドキュメント内にドキュメントを持つことはできないため、必要なのは要素です。

于 2009-07-27T03:27:07.927 に答える
-1

クラスをシリアル化するために必要な型を使用し (String は常に私にとってはうまくいきました)、サーバーまたはクライアント側で必要に応じて変換を行い、ドキュメントの整合性を維持します。1 つまたは複数の XElement から XDocument を作成することもできるので、私なら XElement を使用します。

最悪の場合、クラスのシリアライゼーション動作をオーバーライドすることもできます (リフレクションが得意な場合はそれほどひどいことではありません)。

XmlDocument は古い非 Linq ドキュメントです。それらは、異なるクラスで実装された同じ概念です。

于 2009-06-18T15:17:11.333 に答える
-2

一般に、パフォーマンスの点ではXDocumentandXElememntXmlDocumentandよりも優れています。XmlElement

ただし、string次の理由から、WCF サービス経由で XML ドキュメントを送信するために使用することをお勧めします。

  1. 相互運用性
    • クライアントは、特定の .NET フレームワーク バージョンに関連付けられていません (クライアントは、XDocumentまたはを使用することを選択できますXmlDocument。WCF サービスがそのように構成されている限り、Java ベースのクライアントもサポートできます)。
  2. 元の XML ドキュメントに Xml 宣言が含まれている場合、適切に Xml 宣言を処理します。

注: 大きな xml ドキュメントをサポートするように、構成を適切に調整してください。たとえば、basicHttpBindingのデフォルトの最大メッセージ サイズは 64KB です。

于 2009-07-27T03:55:00.260 に答える