Как отправить пользовательские объекты в сообщении WCF - PullRequest
1 голос
/ 27 октября 2011

Я хотел отправить один пользовательский объект в system.servicemodel.Channels.Message. Как

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

Может кто-нибудь помочь мне разобраться в моей ошибке?

1 Ответ

5 голосов
/ 27 октября 2011

Похоже, вы ищете DataContract :

using System.Runtime.Serialization;

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

    [DataMember]
    string Name; 
}

Проверьте Использование контрактов данных для получения дополнительной информации о DataContracts и WCF.

EDIT

Не уверен, что это сработает или нет, но, как я отметил в своем ответе на ваш комментарий, существует перегрузка метода CreateMessage, который принимает XmlObjectSerializer.Документы MSDN на нем довольно тонкие, но я думаю что-то вроде этого может сделать это:

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

Я не проверял это, но, по крайней мере, это может помочь вам указатьправильное направление.

Для DataContractSerializer необходимо предоставить DataContract (person в первой части моего ответа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...