2009-07-01 13 views
1

xmlファイルをwcfサービスに送信したいのですが、どうすれば送信できますか? データ契約またはメッセージ契約はありますか? 助けてください。WCF DataContracts/MessageContracts経由でXMLファイルを送信するには?

+0

@Praveen:どのようにこの問題にやっていますか?それでも問題が解決しない場合は、送信したいXMLファイルの種類を教えてください。 –

答えて

3

あなたはこのような何かを行うことができます。

var doc = new XmlDocument(); 
doc.LoadXml(xmlContent); 
var message = Message.CreateMessage(MessageVersion.Soap11, "urn:someRequest", new XmlNodeReader(doc)); 

var factory = new ChannelFactory<IRequestChannel>("serviceHttpSoap11Endpoint"); 
var channel = factory.CreateChannel(); 

var response = channel.Request(message); 

channel.Close(); 

だから、まずあなたは、あなたがそれを送信するために上記のサンプルを適応させる、XmlDocumentオブジェクトにXMLファイルをロードします。

私はしばらく前にそのことについて記事を書いた:http://www.pvle.be/2009/02/send-xmldocument-using-windows-communication-foundation/

2

DataContractは、ワイヤを経由するXMLのC#表現を定義します。

基本的に、XMLがどのように見えるかを記述するDataContractであるC#クラスが必要です。クライアントとサーバーでは、生のXMLではなく、C#クラスを操作します。 DataContractがXML形式に整列している場合は、生のXMLをDataContractクラスのクラスインスタンスに逆シリアル化できます。

また、DataContractに文字列フィールドを追加し、そこに生のXMLをパッケージ化して送信することもできます。その場合、あなたは、クライアントとサーバー側で生のXMLの両方で対処する必要がある - -

あなたが持っている最後の選択肢は、WCFの契約のための基本的な、型なしMessageタイプを使用しているではない、かなりすべてで、しかし、あなたの場合本当にしたいです - それはあなた次第です。

MSDN documentation on raw messagesを参照し、Kurt Claeysのblog postをご覧ください。

マルク・

2

それはmarc_s'アドバイスに従うと、高レベルのデータ契約に固執するのがベストですが、任意のXMLを送信するために、時々必要です。これを行うには、OperationContractにXmlElementパラメーターを追加します。

これを行うには、Data Contractシリアライザの代わりにXmlSerializerを使用する必要があります。サービスコントラクトで[XmlSerializerFormat]属性を使用する必要があります。

関連する問題