为什么Web Service将XmlDocument参数转换为System.XML.Linq.XElement参数

时间:2014-12-16 10:03:25

标签: c# .net xml linq web-services

IDE:VS 2010 c#.net 4.0

我创建了一个简单的Web服务,它将XMLDocument作为参数

public class MyWebService : System.Web.Services.WebService
{


  public void ReceiveXML(XmlDocument  xDoc, string strXMLFileName)
    {
        XMLReceiver.Receive(xDoc, strXMLFileName);
    }
}  

当我运行此服务并使用添加服务引用添加到ProjectB时,转到参考文件而不是我找到

 public void ReceiveXML(System.Xml.Linq.XElement xDoc, string strXMLFileName) {
       ReceiveXMLRequest inValue = new ReceiveXMLRequest();
        inValue.Body = new ReceiveXMLRequestBody();
        inValue.Body.xDoc = xDoc;
        inValue.Body.strXMLFileName = strXMLFileName;

    }

这里我没有得到,因为我已经写了XmlDocument类型参数来接收为什么refrence.cs文件是用System.Xml.Linq.XElement xDoc参数而不是XMLDocument类型创建的函数..?

我试图通过在XMLDocument xdoc.load中加载abc.xml文件到webService(strABCContent);

1 个答案:

答案 0 :(得分:1)

当您发布WCF服务时,您正在通过WSDL描述的接口来解耦服务的实际实现,这是技术无关的。 WSDL将无法指定内容是.Net System.Xml.XmlDocument,而是指定抽象(xs:any如果我没记错的话)

这就是为什么在使用服务时(即使是来自相同的.Net技术堆栈),您将获得一个可能不同的客户端界面(与System.Xml.Linq.XElement一样)。

您可以在客户端上使用Linq 2 Xml XDocument.Load替换XmlDocument.Load

var myXDocument = XDocument.Load(strABCContent)

并将其传递给服务引用代理方法ReceiveXML