用户操作
[即时聊天] [发私信] [加为好友]
王颂毓ID:ChinaOk
19165次访问,排名6556,好友0人,关注者0人。
ChinaOk的文章
原创 29 篇
翻译 0 篇
转载 0 篇
评论 2 篇
最近评论
mghueh:wow power leveling
oddoooooooo:三个文件的Zip包
无法打开
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 在.NET框架的Web服务上使用Base64编码收藏

    新一篇: 使用SQL-DMO备份数据库并进行校验 | 旧一篇: ASP.NET的用户控件

    发表日期:23/04/2002 14:43:09
    发表人:Robert Chartier
    发表人信箱:rob@aspfree.com 
    本文说明如何创建和使用二进制数据传送的Web服务,这是相当容易的一件事。

    =================================================================

    在示例中,将从本地磁盘取出图象数据,然后使用SOAP信息将图象传送到调用者手上。
    现在开始讨论有关的Web服务,并特别注重数据编码的有关操作。

    0.  [WebMethod(Description="Get an Image using Base64 Encoding")]
    1.  public byte[] GetImage() {
    2.   return getBinaryFile("C:\\Inetpub\\wwwroot\\webservices\\public\\images\\logo.gif");
    3.   }
    4.  

    注意函数返回byte[] (字节数组)。.NET将自动将返回的数据编码成为base64格式。

    下面的"getBinaryFile()"函数用文件流从硬盘读取文件,然后将图象文件数据转换为byte[]:

    0.  public byte[] getBinaryFile(string filename) {
    1.   if(File.Exists(filename)) {
    2.    try {
    3.     FileStream s=File.OpenRead(filename);
    4.     return ConvertStreamToByteBuffer(s);
    5.     }
       catch(Exception e) {
    6.     return new byte[0];
    7.     }
    8.    }
      else {
    9.    return new byte[0];
    10.   }
    11.  }
    12.  
    13.  public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream) {
    14.   int b1;
    15.   System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
    16.   while((b1=theStream.ReadByte())!=-1) {
    17.    tempStream.WriteByte(((byte)b1));
    18.    }
    19.   return tempStream.ToArray();
    20.   }


    现在可以在.NET上用C#编写客户端程序,过程如下:
    1. 创建C#应用窗体
    2. 增加一个Picture Box控件,命名为pct1
    3. 增加一个Web引用(Reference)到:http://rob.santra.com/webservices/public/images/index.asmx?wsdl
    4. 在程序的事件驱动(Form1_Load, 或其它事件)中写入以下代码:
     0.  com.santra.rob.Images images = new com.santra.rob.Images();
     1.  byte[] image = images.GetImage();
     2.  System.IO.MemoryStream memStream = new System.IO.MemoryStream(image);
     3.  Bitmap bm = new Bitmap(memStream);
     4.  pct1.Image = bm;
     5.  
     6.  

    如果是在自己的服务器上创建这种服务,就要改变Web Reference(引用)地址,同时com.santra.rob.Images()对象也要与增加Web Reference(引用)时创建的对象相一致。

    在上面的代码中,客户向服务器申请含有图象数据的字节数组,并将该数组转换到内存流(MemoryStream),然后加载到Bitmap对象,最后用pct1图象控件显示得到的图象。

    整个过程就是这么简单!

    以下是全部代码:

    0.  <%@ Webservice Language="C#" class="Images" %>
    1.  
    2.  using System;
    3.  using System.Web.Services;
    4.  using System.IO;
    5.  
    6.  [WebService(Namespace="http://rob.santra.com/webservices/public/images/", Description="Demonstration of using Base64 encoding, in a Web Service using the .NET Framework.")]

    7.    public class Images: System.Web.Services.WebService {
    8.     [WebMethod(Description="Get an Image using Base64 Encoding")]
    9.     public byte[] GetImage() {
    10.    return getBinaryFile("C:\\Inetpub\\wwwroot\\webservices\\public\\images\\logo.gif");
    11.   }
    12.   public byte[] getBinaryFile(string filename) {
    13.    if(File.Exists(filename)) {
    14.     try {
    15.      FileStream s=File.OpenRead(filename);
    16.      return ConvertStreamToByteBuffer(s);
    17.      }
         catch(Exception e) {
    18.       return new byte[0];
    19.      }
    20.     }
        else {
    21.     return new byte[0];
    22.     }
    23.    }
    24.  
    25.   public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream) {
    26.    int b1;
    27.    System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
    28.    while((b1=theStream.ReadByte())!=-1) {
    29.     tempStream.WriteByte(((byte)b1));
    30.     }
    31.    return tempStream.ToArray();
    32.    }
    33.   }

    发表于 @ 2002年04月25日 09:18:00|评论(loading...)|编辑

    新一篇: 使用SQL-DMO备份数据库并进行校验 | 旧一篇: ASP.NET的用户控件

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © ChinaOk