2010-09-18 2 views
2

Я возвращаю xmlElement из метода WCf. Когда я делаю ссылку службы в клиенте, тот же метод возвращает XElement вместо XmlElement. Я пробовал все: обновляю ссылку на службу, создавая новую служебную ссылку, но это не помогает.Когда метод WCF возвращает XmlElement, клиент видит XElement?

Это мой клиент:

ServiceReference1.BasicServiceClient basicWCfClient = new ServiceReference1.BasicServiceClient(); 
     XmlElement xmlelement = basicWCfClient.GetData(5); 
     basicWCfClient.Close(); 

я получаю сообщение об ошибке: "Не удается неявно преобразовать тип 'System.Xml.Linq.XElement' до" System.Xml.XmlElement"

когда метод на стороне сервера:

public XmlElement GetData(int value) 
    { 
     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.LoadXml("<msg><node1>Hello</node1><node2>World</node2><request_params><mynode>More</mynode></request_params></msg>"); 
     XmlElement xmlElement = xmldoc.DocumentElement; 
     return xmlElement; 
    } 

и интерфейс:

[ServiceContract] 
public interface IBasicService 
{ 

    [OperationContract]  
    [WebGet(UriTemplate = "GetData?value={value}")] // Add support for HTTP GET Requests 
    XmlElement GetData(int value);} 

Что происходит?

ответ

1

Ничего нехорошо. Клиент не знает, какой тип .NET был использован, а ссылка на службу сообщает только о том, что любой XML может быть возвращен. Он принимает XML и предоставляет его как XElement. Он построен в поведении, и я думаю, что он был выбран MS из-за более нового и более удобного API. Зачем вам нужен метод для возврата XmlElement?

+0

мой тестовый клиент действительно составлен в Framework 3.5, но другой компании (истинный клиент) не будет иметь Framework 3.5, он работает с каркасом 2.0, и он не будет распознавать XElement, потому что XElement - это Framework 3.5. но, с другой стороны, моя служба WCF вернет XmlElement, когда истинный клиент (с инфраструктурой среды 2.0) создаст ссылку на службу? он не вернет Xelement правильно? – Rodniko

+0

просто попробовал ту же ссылку из VS2005 в фреймворке 2.0, и он действительно возвращает Xmlelement. Рамочная среда была проблемой, спасибо! – Rodniko

+0

Прежде всего, когда вы используете службу в .NET 2.0, вы не сможете использовать ссылку «Добавить службу», потому что .NET 2.0 не поддерживает WCF. Вам нужно будет использовать ссылку «Добавить веб-ссылку», и она будет использовать только типы .NET 2.0. –

12

Перейти к Configure Service Reference и проверить Reuse types in referenced assemblies

Затем проверьте System.Xml если вы хотите XmlElement или System.Xml.Linq если вы хотите XElement

Смотрите также this question

+0

Не работает для меня. Я попытался удалить служебную ссылку и создать ее снова. Я также попытался удалить ссылку System.Xml и оставить только System.Xml.Linq. Тем не менее, он по-прежнему использует XmlNode. –

+0

Вы сняли флажок system.xml или просто удалили ссылку из проекта? –

+0

Пробовал в обоих направлениях. Я предполагаю, что WCF пытается использовать XElement не для всех сервисов. В одной службе есть мыло, мыло и привязки http - используется System.Xml. У другого есть мыло и мыло12 - System.Xml.Linq. –

Смежные вопросы