Webservice XML响应反序列化

问题描述:

我拥有目前无法连接的Web服务的WSDL。 Web服务有一个名为ExecuteCommand方法,它返回一个CommandResult CommandResult样子:Webservice XML响应反序列化

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. 

我不知道如何去了解这个。我试图创建CommandResult类型的XmlSerializer,但在第一行中出现XML解析错误。我希望有人能够给我一个关于如何做到这一点的基本例子。

+0

尝试使用的DataContractSerializer来代替。 – 2011-04-18 18:07:44

我最终搞清楚以下和它做什么,我需要:

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

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