Получить только тело сообщения WCf - PullRequest
9 голосов
/ 10 ноября 2009

У меня небольшие проблемы с простой проблемой.

У меня есть метод сервиса, который принимает тип сообщения c #, и я хочу просто извлечь тело этого мыльного сообщения и использовать его для создания совершенно нового сообщения. Я не могу использовать метод GetBody<>() в классе Message, так как я не знаю, к какому типу сериализовать тело.

Кто-нибудь знает, как просто извлечь тело из сообщения? Или создайте новое сообщение с таким же телом, т.е. без оригинального заголовка сообщения и т. Д.

Ответы [ 2 ]

20 голосов
/ 10 ноября 2009

Вы можете получить доступ к телу сообщения, используя метод GetReaderAtBodyContents в сообщении:

using (XmlDictionaryReader reader = message.GetReaderAtBodyContents())
{
     string content = reader.ReadOuterXml();
     //Other stuff here...                
}
5 голосов
/ 10 ноября 2009

Не для того, чтобы опередить ответ Янна, но для чего стоит, вот полный пример копирования тела сообщения в новое сообщение с другим заголовком действия. Вы также можете добавить или настроить другие заголовки как часть примера. Я потратил слишком много времени на написание этого, чтобы просто выбросить его. =) * * Тысяча одна

class Program
{
    [DataContract]
    public class Person
    {
        [DataMember]
        public string FirstName { get; set; }

        [DataMember]
        public string LastName { get; set; }

        public override string ToString()
        {
            return string.Format("{0}, {1}", LastName, FirstName);
        }
    }

    static void Main(string[] args)
    {
        var person = new Person { FirstName = "Joe", LastName = "Schmo" };
        var message = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default, "action", person);

        var reader = message.GetReaderAtBodyContents();
        var newMessage = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Default, "newAction", reader);

        Console.WriteLine(message);
        Console.WriteLine();
        Console.WriteLine(newMessage);
        Console.WriteLine();
        Console.WriteLine(newMessage.GetBody<Person>());
        Console.ReadLine();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...