Я пытаюсь обновить некоторые методы службы WCF, которые возвращают строки для возврата объектов XmlDocument. Я попытался вернуть его как есть и инкапсулировать его в объект datacontract. В любом случае я получаю ошибку при попытке обновить ссылку на службу. Ошибка предполагает инкапсулировать ее в datacontract с операционным контрактом, который я делаю. Есть ли уловка?Возврат XmlDocument из службы WCF не работает
0
A
ответ
2
Там есть способ вернуть XmlDocument из WCF, но вам нужно использовать XmlSerializer
вместо стандартного сериализатора (DataContractSerialier
) - приведенный ниже код показывает, как это можно сделать. Сказав это, рассмотрите возможность использования объектов передачи данных, как указано в комментариях, если только ваш сценарий не требует передачи XmlDocument.
public class StackOverflow_8951319
{
[ServiceContract]
public interface ITest
{
[OperationContract]
string Echo(string text);
[OperationContract, XmlSerializerFormat]
XmlDocument GetDocument();
}
public class Service : ITest
{
public string Echo(string text)
{
return text;
}
public XmlDocument GetDocument()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<products>
<product id='1'>
<name>Bread</name>
</product>
<product id='2'>
<name>Milk</name>
</product>
<product id='3'>
<name>Coffee</name>
</product>
</products>");
return doc;
}
}
static Binding GetBinding()
{
var result = new WSHttpBinding(SecurityMode.None);
//Change binding settings here
return result;
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(ITest), GetBinding(), "");
host.Open();
Console.WriteLine("Host opened");
ChannelFactory<ITest> factory = new ChannelFactory<ITest>(GetBinding(), new EndpointAddress(baseAddress));
ITest proxy = factory.CreateChannel();
Console.WriteLine(proxy.Echo("Hello"));
Console.WriteLine(proxy.GetDocument().OuterXml);
((IClientChannel)proxy).Close();
factory.Close();
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}
1
Если вы хотите, чтобы иметь возможность передать произвольный XML на проволоке лучший способ сделать это, чтобы использовать XElement вместо XmlDocument
XmlDocument не сериализуемым
Смежные вопросы
- 1. Возврат интерфейса из службы WCF
- 2. Возврат 401 из службы WCF
- 3. Возврат SqlDataReader из службы WCF
- 4. Возврат wcf/json из службы wcf
- 5. Возврат открытого считывателя данных из службы WCF
- 6. Возврат пользовательского объекта из службы WCF
- 7. C# - Возврат из службы обслуживания WCF
- 8. Возврат XML из веб-службы
- 9. Вызов службы WCF из JQuery не работает
- 10. Возврат вызова метода ajax службы WCF 404
- 11. службы WCF не работает для почтовой службы
- 12. wcf возвращает XmlDocument?
- 13. Вызов службы WCF из другой службы WCF
- 14. Создание веб-службы wcf и возврат ответа xml в android
- 15. Возврат MembershipUser с использованием службы WCF
- 16. RenderControl из службы WCF не работает; ASMX работает
- 17. Получение и возврат веб-сервиса XmlDocument
- 18. WCF Вызов службы из службы
- 19. Возврат данных JSON из службы WCF с помощью netTcpBinding
- 20. Возврат значимых исключений из проекта WCF
- 21. Запуск службы wcf без App.config не работает
- 22. Как удалить службы ria из службы wcf
- 23. Возврат потока wcf из ткани сервисов/услуг
- 24. Возврат данных из службы времени
- 25. Вызов службы wcf rest из jquery не работает
- 26. Завершение работы или перезагрузка компьютера из службы WCF не работает
- 27. Unity XmlDocument не всегда работает
- 28. Как настроить клиента WCF для использования XElement, а не XmlDocument?
- 29. Возврат XElement из веб-службы
- 30. C# XmlDocument SelectNodes не работает
Trick is: do not do it. Либо верните строку как есть, либо даже лучше: почему вы возвращаете что-то неуклюжие, как XML? Точка веб-сервисов заключается в том, что они абстрагируют XML goo - вы должны работать с надлежащими бизнес-объектами (и их списками). –
Я согласен - вы не должны возвращать типы, такие как XmlDocument, через провод. –
Если вы действительно хотите получить решение или ответ на свой вопрос, я предлагаю вам обновить свой вопрос примерами вашего кода, сообщения об ошибках от компилятора и т. Д. – Kyberias