2009-06-08 6 views
4

私は、XmlWriterを使用してXMLのブロックを構築するImというWCFサービスを持っています。完了したらWCFにXmlDocumentとして返すようにします。wcfはXmlDocumentを返しますか?

しかし、私は[OperationContract]それは仕事をdoesntの中で、常にXmlDocumentている場合:

[OperationContract] 
XmlDocument GetNextLetter(); 

WCFテストユーティリティを提供します:

System.Runtime.Serialization.InvalidDataContractException:タイプ「System.Xmlのを.XmlDocument 'はシリアル化できません。

答えて

10

.Net 3.5を使用している場合は、代わりに​​を返すことができます。これは、IXmlSerializableを実装しています。これは、DataContractSerializerで機能するために必要な欠落した要素です。

2

XMLDocumentを送信しないでください。反対側で再構成できるためです。

おそらく、必要な文字列を送信するか、XMLにシリアル化して送信できるビジネスオブジェクトを作成する必要があります。

XSDを持っていて、シリアル化できるビジネスオブジェクトを作成したい場合は、.netフレームワークでXSD.exeツールを見てください。

+1

xsdがより多くのXmlSerializerに焦点を当てています - WCFはDataContractSerializerをよく使用します... –

+0

私はレガシーXMLシステムに汚染されていると思います:(もしあなたが緑地のWCFレイアウトであれば、datacontractはおそらく行く。 – Spence

2

DataContractSerializerは、XmlElementインスタンスをシリアル化できます。したがって、XmlDocumentインスタンスのDocumentElementプロパティを返すだけです。参照:MSDN

11

アペンドXmlSerializerを使用すると、運用契約で何をしたかの

[OperationContract,XmlSerializerFormat] 
XmlDocument GetNextLetter(); 

これはそれを行います!

関連する問題