C# 读取XML响应Web服务

C# 读取XML响应Web服务,c#,webservice-client,C#,Webservice Client,我对.NETWeb服务编程非常陌生。我在从web服务读取XML响应到客户端时遇到了麻烦 在我的Web服务端:Service1.asmx.cs代码: [WebMethod(Description = "substruction")] public double subtract(double i, double j) { return i - j; } [WebMethod(Description = "getxml")] pub

我对.NETWeb服务编程非常陌生。我在从web服务读取XML响应到客户端时遇到了麻烦

在我的Web服务端:Service1.asmx.cs代码:

    [WebMethod(Description = "substruction")]
    public double subtract(double i, double j)
    {
        return i - j;
    }


    [WebMethod(Description = "getxml")]
    public XmlDocument GetXML()
    {
        StringBuilder sb = new StringBuilder();
        XmlWriter writer = XmlWriter.Create(sb);

        writer.WriteStartDocument();
        writer.WriteStartElement("People");

        writer.WriteStartElement("Person");
        writer.WriteAttributeString("Name", "Nick");
        writer.WriteEndElement();

        writer.WriteStartElement("Person");
        writer.WriteStartAttribute("Name");
        writer.WriteValue("Kevin");
        writer.WriteEndAttribute();
        writer.WriteEndElement();

        writer.WriteEndElement();
        writer.WriteEndDocument();

        writer.Flush();

        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(sb.ToString());
        return xmlDocument;

    }
在这里,我创建了两个方法来测试响应。在GetXML中,我创建了一个非常简单的XML,并将包XML返回给客户端

在我的客户端:

    // Add button click function 
    protected void Button1_Click(object sender, EventArgs e)
    {
        string selectFlag = selectOper.Value;
        localhost.Service1 web = new localhost.Service1(); // Have to be the same name as youre Service1. 
        if (selectFlag.Equals("+"))
        {
            Result.Text = (web.addition(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
        }
        else if (selectFlag.Equals("-"))
        {
            Result.Text = (web.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
        }

    }

    protected void Button2_Click(object sender, EventArgs e)
    {


        localhost.Service1 web2 = new localhost.Service1(); // Can u please do not be so silly, use different instance name here. 
        Button clickedButton = (Button)sender;

        XmlDocument xmltest = new XmlDocument();
        xmltest = web2.GetXML();
您可以看到,我试图获取web2.GetXML()并将整个XML转换为XmlDoucment。然而,它说错误1不能隐式地将类型“object”转换为“System.Xml.XmlDocument”。存在显式转换(是否缺少转换?)C:\Documents and Settings\qili\My Documents\Downloads\WebService3\WebService2\WebService2\Default.aspx.cs 39 24 WebService2


任何提示,我想我做错了什么。但Buttom1_Click方法运行良好

尝试转换服务的响应:

protected void Button2_Click(object sender, EventArgs e)
    {


     localhost.Service1 web2 = new localhost.Service1(); // Can u please do not be so silly, use different instance name here. 
     Button clickedButton = (Button)sender;
     XmlDocument xmltest = new XmlDocument();
     xmltest = (XmlDocument)web2.GetXML();
    }

您应该尝试删除服务引用,重新运行服务,然后在客户机上添加服务引用。

是否使用调试器检查了GetXML()返回的实际类型?另外,在下一行替换XmlDocument时,不需要初始化新的XmlDocument实例。您可以尝试显式强制转换它xmltext=(XmlDocument)web2.GetXML()您是否已将
公共对象GetXML()
更改为
公共XmlDocument GetXML()
?如果需要添加对服务的引用,那么它已经是公共的XmlDocument GetXML()XmlDocument了;用户代码未处理NotImplementedException。在xmltest=(XmlDocument_web2.GetXML())中,您应该调试是否能够访问代码。我试图调试它。我无法通过使用直接访问XML,但可以单击“调用”以获得访问权限