Десериализация XML-ответа Webservice - PullRequest
1 голос
/ 18 апреля 2011

У меня есть WSDL для веб-службы, к которой я не могу подключиться. В веб-сервисе есть метод с именем ExecuteCommand, который возвращает CommandResult CommandResult выглядит так:

string ResultMessage;
DataSet ResultDataset;
bool ResultSuccess;

Я добавил WebService в качестве ссылки на службу, но поскольку в настоящее время я не могу получить доступ к фактическому WebService, мне нужно отработать файл XML, который является (мне говорят) ответом XML, который должен вернуть WebService Я называю это ExecuteCommand метод.

Если бы WebService работал, я бы просто сделал что-то вроде:

MyWebService.ServiceDataInterfaceSoapClient ws = new ServiceDataInterfaceSoapClient();
MyWebService.CommandResult result = ws.ExecuteCommand();

Вместо этого я хочу сделать что-то вроде:

MyWebService.CommandResult result = //Load Result from XML file which contains the XML response that ws.ExecuteCommand would return.

Я не уверен, как это сделать. Я попытался создать XmlSerializer типа CommandResult, но я получаю ошибки синтаксического анализа XML в самой первой строке. Я надеюсь, что кто-то может указать мне основной пример того, как это сделать.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

В итоге я понял следующее, и он делает то, что мне нужно:

XmlSerializer xml = new XmlSerializer(typeof(CommandResult),"XMLNamespaceFromWSDL");
CommandResult cr;
using (Stream stream = new FileStream("CommandResult.xml", FileMode.Open))
     cr = (CommandResult)xml.Deserialize(stream);
1 голос
/ 18 апреля 2011

Похоже, вы пытаетесь воссоздать то, что WCF обычно делает для вас. Вероятно, проще создать новую локальную службу WCF, которая реализует интерфейс ServiceContract, который SvcUtil создает для вас. В локальном сервисном коде вы просто добавили бы новый объект MyWebService.CommandResult и передали ему правильные значения из предоставленного файла. Таким образом, клиентский код не нужно будет модифицировать для использования XML-ответа, хранящегося в файле. Этот подход будет работать, даже если вы пытаетесь использовать сервис, не основанный на WCF. Просто передайте SvcUtil WSDL и используйте basicHttpBinding для макетирования любого базового профиля (asmx и немного на основе Java). Было бы полезно узнать больше о том, как создается объект ServiceDataInterfaceSoapClient.

...