.NET web服务返回无效的xml

本文关键字:xml 无效 返回 web 服务 NET | 更新日期: 2023-09-27 18:23:45

我有一个简单的.NET web服务,它应该返回一个字符串值。它创建一个DataSet并返回GetXml()方法,如下所示:

    [WebMethod]
    public string GetOpenIssues(string CustomerCode, string LocationShortName)
    {
        DAL.EncodedConnectionString = ConfigurationManager.ConnectionStrings["EncodedConnectionString"].ConnectionString;
        System.Data.SqlClient.SqlCommand sc = new System.Data.SqlClient.SqlCommand("GetOpenIssues");
        sc.Parameters.AddWithValue("CustomerCode", CustomerCode);
        sc.Parameters.AddWithValue("LocationShortName", LocationShortName);
        return DAL.SPDataSet(sc, "OpenIssues").GetXml();
    }

问题是,当我从另一个程序调用这个web服务或在调试模式下运行它并查看结果时,它会给我以下信息:

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="RemoteWebService"><OpenIssues> <Table> <IssueID>15351</IssueID>   <IssueSummary>Computer keeps crashing. This continues to be a problem</IssueSummary> <LocationName>West Side</LocationName> <Status>WIP</Status> <CustomerID>89755</CustomerID> <CustomerName>West Side Computers</CustomerName> <CustomerShortName>WSC</CustomerShortName> <Notes /> <STATUS1>Work In Progress</STATUS1> <SubmittedBy>WSC - Tom Johns</SubmittedBy> <EQ_Replaced>true</EQ_Replaced></Table> </OpenIssues></string> 

正如你所知,它的格式不正确。出于某种原因,它在每个元素之间放置了空格。

你知道我做错了什么吗?我想做的就是返回这个结果的xml,这样我就可以在其他不是用.NET.编写的内部应用程序中使用它

更新谢谢你的回复,但我认为格式是个问题,原因如下。我正在编写一个使用此web服务的Android应用程序。我可以很好地连接和检索xml字符串,但当我试图解析它时,由于字符串中有额外的空间,它会错过节点。为了进一步证实这一点,如果我直接将web服务URL的输出复制并粘贴到一个空文件中,将其保存为.xml并尝试查看,它不会打开。此外,当我尝试右键单击web服务输出页面以";"视图源";,它说目前无法查看。但是,当我使用格式正确的xml字符串时,我可以在浏览器中查看它并查看源代码。

不太确定这里还能说什么。。。。我们在Android/Java方面做了很多故障排除,这里是StackOverflow Android Question,当我们使用上面格式化的XML(意味着其中有额外的空格)时,解析器不会拾取IssueSummary元素。但是,如果我手动删除空格并将应用程序指向新文件(而不是web服务),那么它会找到IssueSummary元素并显示数据。这难道不让你相信这与节点之间的空间有关吗?

更新#2-分辨率

经过一次又一次的挖掘,我终于找到了一个解决方案。我们的web方法使用.GetXml(),它返回上面的Xml,每个节点之间都有空格。我和我的同事尝试了几种web服务,发现如果我们使用XmlDocument并调用InnerXml属性,它会返回不带空格的xml:

    [WebMethod]
    public string GetOpenIssues(string CustomerCode, string LocationShortName)
    {
        DAL.EncodedConnectionString = ConfigurationManager.ConnectionStrings["EncodedConnectionString"].ConnectionString;
        System.Data.SqlClient.SqlCommand sc = new System.Data.SqlClient.SqlCommand("GetOpenIssuesSite");
        sc.Parameters.AddWithValue("CustomerCode", CustomerCode);
        sc.Parameters.AddWithValue("ICAO", LocationShortName);
        System.Data.DataSet ds = DAL.SPDataSet(sc, "OpenIssues");
        System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
        System.IO.StringWriter sw = new System.IO.StringWriter();
        ds.WriteXml(sw);
        doc.LoadXml(sw.ToString());
        return doc.InnerXml;
    }

一旦我们这样做了,另一端的解析器(Android应用程序)就完美地处理了它。因此,使用XmlDocument的.InerXml而不是DataSet的.GetXml()似乎更安全。

感谢那些提供帮助的人,非常感谢!

.NET web服务返回无效的xml

我认为格式化很琐碎。xml解析器将把文档解析为xml,而不管它们之间是否有空格。调用一个函数,获取一个xml,xml读取器处理该xml。也许文档本身有一个空格。