Как вернуть веб-сервис WCF без ошибки сериализации - PullRequest
0 голосов
/ 01 июля 2010

Я получаю сообщение об ошибке после доступа к своему веб-сервису, например:

Ошибка сервера в приложении '/'.

Тип 'System.Xml.XmlDocument' не может быть сериализован. Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute. См. Документацию Microsoft .NET Framework для других поддерживаемых типов.

SRC довольно прост:

public interface IService1
{
 [OperationContract]
 [WebGet(ResponseFormat = WebMessageFormat.Xml)]
 XmlDocument TwitterGetPublicTimeline();
}

и веб-сервис:

    public XmlDocument TwitterGetPublicTimeline()
    {            
        var t = new Yedda.Twitter();
        return t.GetPublicTimelineAsXML();
    }

если я верну, в нем есть строка, которой предшествует документ "который недопустим ..: |

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Вы можете изменить свой метод на

    public String TwitterGetPublicTimeline()
    {
        var t = new Yedda.Twitter();
        return t.GetPublicTimelineAsXML().InnerXml;
    }

, чтобы вернуть только String, а на стороне клиента используйте метод XmlDocument.LoadXml(), чтобы преобразовать его обратно в XmlDocument.

2 голосов
/ 01 июля 2010

XmlDocument не сериализуем (как вы узнали). Вам также следует избегать возврата типов фреймворка при вызове WS для взаимодействия. Лучше всего вернуть XML в виде строки и позволить клиенту загрузить его в DOM, специфичный для клиента, или вернуть сериализуемый пользовательский тип.

...