2010-09-30 57 views
4

我試圖根據現有的示例消息測試[MessageContract]類,並且正在尋找一種方法來簡化開發,方法是將示例消息文件讀入我的[MessageContract]類的實例中,並查看它是如何實現的(I'在這裏處理一個非WCF起源的特別複雜的合同)。如何將XML文件轉換爲MessageContract類的實例?

[MessageContract]類看起來是這樣的:

[MessageContract(IsWrapped = true, WrapperName = "wrapper", WrapperNamespace = "somens")] 
public class RequestMessage 
{ 
    [MessageHeader(Name = "HeaderElem", Namespace = "otherns")] 
    public XElement CorrelationTimeToLive { get; set; } 

    [MessageBodyMember(Name = "id", Namespace = "somens")] 
    public XElement id { get; set; } 
} 

我可以讀取該文件爲Message類的實例,使用的代碼如下所示:

var xr = XmlReader.Create("sample_message.xml"); 
var msg = Message.CreateMessage(xr, int.MaxValue, MessageVersion.Soap12); 

這不是格外有幫助但是,因爲它不允許我測試我的[MessageContract]課程。

WCF的某些地方是將此Message實例變爲特定[MessageContract]類的實例的系統,但它是什麼?

回答

5

我剛剛在與同事談話之後學會了如何做到這一點。我認爲這是你要求做的。

namespace MessageContractTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string action = null; 
      XmlReader bodyReader = XmlReader.Create(new StringReader("<Example xmlns=\"http://tempuri.org/\"><Gold>109</Gold><Message>StackOverflow</Message></Example>")); 
      Message msg = Message.CreateMessage(MessageVersion.Default, action, bodyReader); 
      TypedMessageConverter converter = TypedMessageConverter.Create(typeof(Example), "http://tempuri.org/IFoo/BarOperation"); 
      Example example = (Example)converter.FromMessage(msg); 
     } 
    } 


    [MessageContract] 
    public class Example 
    { 
     [MessageHeader] 
     public string Hello; 

     [MessageHeader] 
     public double Value; 

     [MessageBodyMember] 
     public int Gold; 

     [MessageBodyMember] 
     public string Message; 
    } 
} 
+0

顯然你需要一個動作和正確的消息版本,但這是我知道如何做到這一點。最後你會得到一個Example對象你可以用TypedMessageConverter做類似的事情,通過使用ToMessage轉換爲一個字符串表示 – 2010-11-10 00:30:24

-1

您需要將XML反序列化爲數據合約的實例。這就是WCF在封面上爲你做的。

Here is a quick tutorial這將告訴你如何爲你的XML手動調用DataContractSerializer

+1

呃,這裏沒有'[DataContract]'。這是一個'[MessageContract]',其中包含'[MessageHeader]'和'[MessageBodyMember]'屬性。 – Mark 2010-09-30 16:01:13

+0

此外,XML文件不僅僅是肥皂消息的正文部分,它是整個完整的信封。 – Mark 2010-09-30 16:03:35