当前位置:编程学习 > C#/ASP.NET >>

webservice中客户端如何解码base64binary

项目描述:
    最近从网上获取一个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();
      }
    }
}



--------------------编程问答-------------------- 自己先顶一下 --------------------编程问答-------------------- 我想问你的传输是用get还是post?
get有长度限制,所以一般用post --------------------编程问答-------------------- post方式啊 --------------------编程问答-------------------- 可以看看GetDataAndIAQI0320的方法写的是什么吗? --------------------编程问答-------------------- 这些方法应该在服务器端吧,服务器端的代码应该是看不到的
--------------------编程问答-------------------- --------------------编程问答-------------------- 你好,我服务器端 发给客户端的是Base64String 字符.
 我转的是byte[]  .把byte[]转为Base64String ;
如果要转Base64String ,  Convert.FromBase64String 这样既转为byte[] --------------------编程问答-------------------- 关键我得到的服务器端发过来的数据格式就是Base64Binary byte[]格式,使用Convert.ToBase64String函数得到的是乱码 --------------------编程问答-------------------- 急啊,有没有哪位高手懂的指点一下啊 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 这应该是空气质量的数据吧 --------------------编程问答-------------------- 有没有大神指教 --------------------编程问答-------------------- 用JS的Base64解码试试 --------------------编程问答-------------------- C#的不行吗? --------------------编程问答-------------------- 没有人能够回答这个问题吗? --------------------编程问答-------------------- 高手都跑哪里去了? --------------------编程问答-------------------- 这个好像是服务器端加过密,直接解码是存在问题的 --------------------编程问答-------------------- 看文档了,返回的是什么。

一幅图片也可以用byte[]返回,可能不能转成字符串的。 --------------------编程问答-------------------- base64binary的意思是,返回值或者参数是binary,但是传输的时候编码成Base64,因为binary没法再http上传输。 --------------------编程问答-------------------- 你获取的是二进制数据,不是字符串,二进制数据的查看显示不能用Encoding转换。 --------------------编程问答-------------------- http://tianxiaohui.com/%E5%85%A8%E5%9B%BD%E7%A9%BA%E6%B0%94%E8%B4%A8%E9%87%8F-soap-web-service-api/

如果是加密了,还来误导别人,这不是拿人开涮哦。 --------------------编程问答-------------------- 原来加了密,呵呵!通过抓包工具能否把key找出来? --------------------编程问答-------------------- 正在学习 wcf --------------------编程问答-------------------- 请问下,如果在客户端要传递的参数是
我是用Flex做客户端,其中content需要传递的是base64Binary类型,fileType我使用file.name就传过去了,那么content怎么传递?客户端定义了有一个file:FileReference = new FileReference();
求解~
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,