2009-07-01 35 views

回答

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(); 

所以,首先你加載XML文件中的XmlDocument對象,那麼你適應上述樣品送它。

我寫了一個關於前一陣子後:http://www.pvle.be/2009/02/send-xmldocument-using-windows-communication-foundation/

2

DataContract定義了您的C#表示XML的線路。你不希望看到原始的XML - 相信我..... :-)

所以基本上,你需要一個C#類,它是你的DataContract來描述你的XML的樣子。在客戶端和服務器上,您將使用C#類 - 而不是原始XML。如果DataContract與XML格式保持一致,則可以將原始XML反序列化爲DataContract類的類實例。

或者,您可以隨時在DataContract中添加一個字符串字段,並在其中打包原始XML並將其發送。

你擁有的最後的選擇是使用基本,非類型化Message型爲WCF合同 - 在這種情況下,你需要處理原始XML客戶端和服務器端上 - 不漂亮可言,但如果你真的很想 - 這取決於你。

查看MSDN documentation on raw messages並查看Kurt Claeys'blog post就可以了。

馬克

2

雖然這是最好遵循marc_s的意見,並與高級別數據的合同堅持,有時需要發送任意的XML。爲此,您可以將一個XmlElement參數添加到OperationContract中。

爲了做到這一點,您必須使用XmlSerializer而不是Data Contract Serializer。您需要在服務合約上使用[XmlSerializerFormat]屬性。