Web服务XML响应反序列化

时间:2011-04-18 17:47:38

标签: c# xml wcf web-services

我有一个我目前无法连接的Web服务的WSDL。 Web服务有一个名为ExecuteCommand的方法,它返回CommandResult CommandResult看起来像:

string ResultMessage;
DataSet ResultDataset;
bool ResultSuccess;

我已经添加了WebService作为服务引用,但由于我目前无法访问实际的WebService,我需要处理一个XML文件(我被告知)WebService将返回的XML响应我称之为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 个答案:

答案 0 :(得分:1)

听起来你正在尝试重新创建WCF通常为你做的事情。创建一个新的本地WCF服务可能更简单,该服务实现了SvcUtil为您创建的ServiceContract接口。在本地服务代码中,您只需新建一个MyWebService.CommandResult对象,并从提供的文件中提供正确的值。这样就不需要修改客户端代码来使用存储在文件中的XML响应。即使您尝试使用非基于WCF的服务,这种方法也可以正常工作。只需为WSDL提供SvcUtil并使用basicHttpBinding来模拟任何Basic Profile(asmx和一些基于java的)服务。有关如何创建ServiceDataInterfaceSoapClient对象的更多细节将会有所帮助。

答案 1 :(得分:1)

我最终搞清楚了以下内容并且正在做我需要的事情:

XmlSerializer xml = new XmlSerializer(typeof(CommandResult),"XMLNamespaceFromWSDL");
CommandResult cr;
using (Stream stream = new FileStream("CommandResult.xml", FileMode.Open))
     cr = (CommandResult)xml.Deserialize(stream);