项目描述:
最近从网上获取一个silverlight的网页的数据,通过fiddle2.0分析出了svc文件的链接地址,从而得到了webservice的wsdl描述文件,通过webservices暴露出来的方法进行调用,能够获取普通的string类型的数据,但其中有个函数返回的是byte[] 类型的base64binary,通过直接tobase64string然后获取字符串的时候显示乱码,不知如何解决。求大侠帮助。
采用如下语句调用webservice服务:
EnvAQIServeiceClient myclient = new EnvAQIServeiceClient(); //建立客户端
byte[] base64str =myclient.GetDataAndIAQI0320("北京", ""); //获取数据
string desstr = Encoding.UTF8.GetString(base64str); //转换为字符串
通过上面的语句返回结果如下图(显示为乱码),以下为设置断点跟踪得到的结果:
WSDL的描述文件如下图:
通过fiddle抓包获取的内容如下:
抓包的内容文本如下:
HTTP/1.1 200 OK
Content-Length: 2820
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Fri, 29 Mar 2013 05:25:22 GMT
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetDataAndIAQI0320Response xmlns="http://tempuri.org/"><GetDataAndIAQI0320Result>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</GetDataAndIAQI0320Result></GetDataAndIAQI0320Response></s:Body></s:Envelope>
通过在网上查阅有网友回答说服务器端对base64binary进行序列化传输的时候采用了gzip压缩,所以又下了一个gzip解码的函数,但解码过程中提示幻数不正确,解码函数如下:
public static byte[] Decompress(Byte[] bytes)
{
using (MemoryStream tempMs = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(bytes))
{
GZipStream Decompress = new GZipStream(ms, CompressionMode.Decompress);
Decompress.CopyTo(tempMs);
Decompress.Close();
return tempMs.ToArray();
}
}
}
我补充一下上面的内容,楼上这位兄弟回复得很详细,我现在是用C#开发,不知道如何用语句实现,楼上这位仁兄是否可以告知详细语句,把这个xml文本在客户端取出来,直接存到文件当中去
--
FROM 219.140.167.*