VS2010 путает System.Xml.XmlElement с System.Xml.Linq.XElement? - PullRequest
9 голосов
/ 18 мая 2010

Я создал службу WCF с одним методом, который возвращает System.Xml.XmlElement:

Интерфейс:

[ServiceContract]
public interface IWCFService
{
    [OperationContract]
    XmlElement Execute(...);
}

Услуги:

public XmlElement Execute(...)
{
    XmlNode node = ...;

    return (XmlElement)node;
}

Когда я пытаюсь получить доступ к службе, развернутой на моем сервере

WCFServiceClient service = new WCFServiceClient("WSHttpBinding_IWCFService");
XmlElement node = service.Execute(...);

Я получаю ошибку:

Не удается неявно преобразовать тип 'System.Xml.Linq.XElement' в 'System.Xml.XmlElement'

При поиске моего сервисного решения я не вижу ссылки на System.Xml.Linq.XElement. Это неправильно с моей стороны ожидать System.Xml.XmlElement или VS 2010 дурачит меня?

Ответы [ 3 ]

21 голосов
/ 15 июня 2011

То, что я нашел, работает лучше и проще для меня - щелкнуть правой кнопкой мыши ссылку на службу и затем нажать «Настроить ссылку службы». Однажды в диалоговом окне для этого внизу вы увидите 2 переключателя с надписью «Повторное использование типов в всех ссылочных сборках» или «Повторное использование типов в указанных ссылочных сборках». Нажмите на второй вариант для «указанных сборок». Список будет включен, и вы сможете проверить все сборки и оставить System.Xml.Linq без отметки . Таким образом, каждый раз, когда вы обновляете сервисную ссылку, вы получите ожидаемые результаты, которые будут сохранены в конфигурации клиента.

5 голосов
/ 17 декабря 2010

1) Удалите ссылку system.xml.linq с вашего клиента 2) Обновите вашу справочную службу 3) Перегенерированный файл Reference.cs теперь будет ссылаться на XmlElement вместо XElement

0 голосов
/ 19 мая 2010

Я не хочу отвечать на свой вопрос, но здесь он звучит так:

Насколько я понимаю, System.Xml.XmlElement МОЖЕТ использоваться в качестве типа возврата для службы WCF.DataContractSerializer, используемый по умолчанию в WCF, поддерживает этот тип, и поэтому нет необходимости использовать XmlSerializer.

Однако моя проблема не имеет ничего общего с сериализацией,но спасибо Раджу Каймалу за предложение об этой возможности.

Я следовал учебникам WCF , предоставленным Microsoft, которые говорят вам добавить службу WCF как Справочник по услуге , если вы хотите воспользоваться услугой.Это кажется нормальным в VS2008, но при переключении на VS2010 этот подход меняет тип возврата с System.Xml.XmlElement на (более новый?) System.Xml.Linq.XElement.Чтобы решить эту проблему, вам нужно добавить службу в виде Web Reference .

...