3

WCF 通信でネットワーク経由で送信されるデータ コントラクトについて疑問に思っています。相互運用性のために、データ コントラクトの一部としてネイティブ .NET 型を送信することはお勧めできません (許可されていない可能性さえありますか?)。

ServiceOperationへの入力として.NETXmlDocumentタイプを受け入れるサービスが必要です。タイプ(DataContract属性でマークされる)を保持するラッパークラス(属性でマークされる)を作成し、これをパラメーターとして使用する場合、これは合法/可能ですか?XmlDocumentDataMemberServiceOperation

XmlDocumentタイプの利便性を維持しながら、相互運用性を確保するにはどうすればよいですか? stringのパラメーターとしてa を受け入れてから、サービス側でメソッドを使用してServiceOperationan をインスタンス化する方が良い設計上の選択ではないでしょうか?XmlDocumentXmlDocument.LoadXml(string)

ヘルプ/ビュー/コメントをお待ちしております。wcf を使い始めたばかりなので、最初にサービスの作成に飛び込む前に、頭の中の混乱を解消したいと思います。

ありがとう!

4

5 に答える 5

2

[XmlSerializerFormat] 属性を追加する必要があります。

だから(あなたもそれを使うことができますがDatacontractを使わずに):

[ServiceContract(Namespace = "urn:SerializationTest")]

[XmlSerializerFormat]

パブリック インターフェイス IBlah

{

【運営契約】

XmlDocument Returnxmldoc();

}

于 2008-12-18T10:41:47.113 に答える
1

多くの場合、開発者は「相互運用性」のために何かをコーディングしますが、実際にはこれを行う理由や必要性がまったくありません。

ネイティブの .NET 型を使用してもまったく問題ありません。例: シリアル化のために、「Point」を 2 つの整数に分割しますか?

残念ながら、System.Xml.XmlDocument ... はシリアル化できません:)

ただし、「XElement」を使用できます...これは完全に機能します(System.Xml.Linq名前空間で)。

于 2008-11-21T12:42:32.123 に答える
0

XML ドキュメントの XSD はありますか? その場合、svcutil.exe (svcutil.exe /dconly schemaName.xsd) を使用して DataContract 複合構造を生成するのは非常に簡単です。その時点で、DataContractSerializerを使用して、XML ドキュメントと、サービス インターフェイスおよび実装で使用できる DataContract の複合体との間を移動することができます。

また、互換性に関する YAGNI のコメントがある以前のポスターにも同意します。

JB http://jb-brown.blogspot.com

于 2008-11-23T21:27:58.067 に答える
0

文字列を渡す方が相互運用性には優れていますが、CLR データ型を渡したい場合は、KnownType 属性を使用してクラスをマークアップすることを検討できます。

于 2008-11-21T12:23:31.647 に答える
0

2番目のケースで私がすることは、別のdllでデータコントラクトを作成し、両方のアプリケーションでそれを参照することです(両方のサービスを制御していると思います)。したがって、サービス B 内でサービス A のプロキシ クラスを作成する場合、データ コントラクトは既知のタイプからのものであり、データ コントラクト dll を指すと言えます。ところでVS 2008はデフォルトでそれを行います。.NET 3.0 を使用している場合は、svcutil を使用してクラスを手動で作成する必要がある場合があります。

これが役立つことを願っています。

乾杯、ワーグナー。

于 2008-11-23T00:50:11.590 に答える