2011-10-27 82 views
1

我想在system.servicemodel.Channels.Message中發送一個自定義對象。像如何在WCF中發送自定義對象消息

public class person 
{ 
    string Id; 
    string Name; 
} 

MessageVersion mv = MessageVersion.Create(Soap12); 
String action = "Msg"; 

Message msg = Message.Create(mv, action, new person()); 

serviceref.ProcessMsg(msg) // this is my service reference in client 

//when i tried to access this in Service like 
person p = msg.GetBody<person>() 
//I am getting an serialization exception 
//I have the Person class on both client and service side 

有人可以幫我找出我的錯誤嗎?

回答

5

看起來你正在尋找一個DataContract

using System.Runtime.Serialization; 

[DataContract] 
public class person 
{ 
    [DataMember] 
    string Id; 

    [DataMember] 
    string Name; 
} 

退房Using Data Contracts關於DataContracts和WCF的詳細信息。

編輯

不知道這是否會做的伎倆或沒有,但正如我在給您的評論迴應指出,有接受一個XmlObjectSerializer的的CreateMessage方法的重載。它MSDN文檔是相當薄,但我覺得這樣的事情可能做到這一點:

Message msg = Message.Create(mv, action, new person(), new DataContractSerializer(typeof(person))); 

我沒有測試過這一點,但在至少它可以讓你在正確的方向。

DataContractSerializer將需要提供一個DataContract(person在我的答案的第一部分)。

+0

嘿,我試過這個,但我的服務合同的輸入和輸出只有System.ServiceModel.Channel.Message。由於這個人不是直接的投入,它不會幫助我,我想。 – realn

+0

@realn - 如果您使用了另一種CreateMessage方法 - 如果使用XmlObjectSerializer的第四個參數:[Message.CreateMessage方法(MessageVersion,String,Object,XmlObjectSerializer)](http://msdn.microsoft.com/zh-cn/ com/en-us/library/ms195454.aspx) – Tim

+0

第1行位置錯誤695.期望元素'Person'來自命名空間'http://schemas.datacontract.org/2004/07/DCS'..遇到'元素'名稱爲'string',命名空間爲'http://schemas.microsoft.com/2003/10/Serialization/'。 – realn