C# 如何使用System.Net.WebClient()从带有正确编码标记的Web服务下载XML?

C# 如何使用System.Net.WebClient()从带有正确编码标记的Web服务下载XML?,c#,.net,web-services,C#,.net,Web Services,我正在使用System.Net.WebClient().DownloadFile()下载Web服务对文件的响应。响应相当大,所以我不使用直接的SOAP调用,它将返回单个字符串,占用太多内存。 Web服务的响应是XML,我得到的结果是 <?xml version="1.0" encoding="utf-8?> <string xmlns="MyAPI> &lt;object name="First object"&gt; ... 对象名称=“第一个对象”

我正在使用
System.Net.WebClient().DownloadFile()
下载Web服务对文件的响应。响应相当大,所以我不使用直接的SOAP调用,它将返回单个字符串,占用太多内存。 Web服务的响应是XML,我得到的结果是

<?xml version="1.0" encoding="utf-8?>
<string xmlns="MyAPI>
&lt;object name="First object"&gt;
...

对象名称=“第一个对象”
...
所以问题是整个响应被包装成一个“string”属性,而真正的XML内容被编码。
如果不重新读取整个保存的文件并将所有内容转换回来,我如何才能获得原始和正确格式的响应?

我不知道您为什么认为web服务调用会占用太多内存。你试过WCF吗

你的问题是你打错电话了。毫无疑问,您正在使用GET HTTP请求


如果您坚持不使用服务引用,那么我建议您使用WebRequest,并通过GetResultStream()方法读取结果。您甚至可以通过将该流传递到XmlReader.Create(stream)来将结果处理为XML,该流将返回一个XmlReader对象,该对象可用于读取数据,而无需将数据全部读入内存。

我不知道您为什么认为web服务调用会占用太多内存。你试过WCF吗

你的问题是你打错电话了。毫无疑问,您正在使用GET HTTP请求


如果您坚持不使用服务引用,那么我建议您使用WebRequest,并通过GetResultStream()方法读取结果。您甚至可以通过将该流传递到XmlReader.Create(stream)来将结果处理为XML,该流将返回一个XmlReader对象,该对象可用于读取数据,而无需将数据全部读入内存。

它占用了太多内存,因为使用SOAP和服务引用,我返回了一个包含800万个字符的字符串对象。我在一个嵌入式设备(iPhone)上运行,在那里分配800万个字符的字符串(=16MB,unicode的b/c)可能会导致问题。不幸的是,WCF不是一个选项,但我将在将来的版本中使用它。目前我正在使用WebClient()-WebRequest只是一个比较简单的工作。但是,两者都返回相同的结果:标记被编码,所以回到我的问题::-)请张贴服务的签名。它是否返回
字符串
?是你创造的服务吗?是的,是我创造的。是的,它返回一个字符串。如果您想返回XML,那么为什么返回类型是
string
,而不是
XElement
xmlement
?如果返回类型是
string
,则必须对其进行编码。我不知道!也许这是历史性的增长。我对此无能为力。这可能还不清楚。当我说我确实创建了这个服务时,我指的是它。事实是:它正在返回一个字符串。事实是:字符串包含XML。事实是:如果我使用常规SOAP调用,我可以将返回的字符串(XML)直接加载到XmlDocument中。如果我做一个普通的web请求,我会得到相同的响应,但是嵌入到一个“string”标记中,并且标记的内容(XML)是HTML编码的。它占用了太多的内存,因为使用SOAP和服务引用,我会得到一个包含800万个字符的string对象。我在一个嵌入式设备(iPhone)上运行,在那里分配800万个字符的字符串(=16MB,unicode的b/c)可能会导致问题。不幸的是,WCF不是一个选项,但我将在将来的版本中使用它。目前我正在使用WebClient()-WebRequest只是一个比较简单的工作。但是,两者都返回相同的结果:标记被编码,所以回到我的问题::-)请张贴服务的签名。它是否返回
字符串
?是你创造的服务吗?是的,是我创造的。是的,它返回一个字符串。如果您想返回XML,那么为什么返回类型是
string
,而不是
XElement
xmlement
?如果返回类型是
string
,则必须对其进行编码。我不知道!也许这是历史性的增长。我对此无能为力。这可能还不清楚。当我说我确实创建了这个服务时,我指的是它。事实是:它正在返回一个字符串。事实是:字符串包含XML。事实是:如果我使用常规SOAP调用,我可以将返回的字符串(XML)直接加载到XmlDocument中。如果我执行一个普通的web请求,我会得到相同的响应,但嵌入到一个“字符串”标记中,并且标记的内容(XML)是HTML编码的。