當前位置:工程項目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA快博
Web服務(wù)與二進制傳輸
Web服務(wù)與二進制傳輸
王凌峰
本文將要討論 XML 二進制對象的序列化。在這個例子中,我們構(gòu)造的 Web 服務(wù)將以二進制數(shù)組的形式輸出一張圖片,它也可以是 mp3、應(yīng)用程序或者任何其它二進制信息。可能的用途包括 Web 服務(wù)發(fā)布最新的新聞?wù)掌if 格式的統(tǒng)計圖表等。這些圖片當然可以直接發(fā)布在 Web 應(yīng)用程序的企業(yè)層上,但是如果公司僅僅需要向位于 Internet 上的圖片供應(yīng)商發(fā)出請求就能得到它們,豈不更好?
- “嗨,我是 cshrp.net 上的一個網(wǎng)頁。我想得到這些數(shù)據(jù)的餅狀圖和相關(guān)信息??臁!?
- “哦,網(wǎng)頁你好。沒問題,圖片很快就到,正在進行 HTTP 傳輸,請稍候?!?
- “哇,酷。請問能否在一小時后根據(jù)新的數(shù)據(jù)繪出餅狀圖再傳給我?”
- “呵呵,好說,好說。我是 web 服務(wù),沒有做不到的?!?
對,就這樣。明白了?好,來看看下列代碼,我們將用它來傳送一張示范圖片 C:InetpubwwwrootwebservicesSample.jpg 。
<%@ WebService Language="C#" Class="Binaries"%>
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web.Services;
public class Binaries : WebService
{
[WebMethod()]
public Byte[] GetBinary()
{
Image sample = new Bitmap(@"C:InetpubwwwrootwebservicesSample.jpg");
MemoryStream output = new MemoryStream();
sample.Save(output, ImageFormat.Jpeg);
return output.GetBuffer();
}
}
既然我們要處理的是圖片,當然要包含名字空間 System.DrawingandSystem.Imaging 。我們要建立的是一個 Web 服務(wù),并且用到了 MemoryStream 對象,因此還要包含 System.IOandSystem.Web.Service 。
代碼十分簡單。然后,我們創(chuàng)建了包含那張圖片的 image 對象。接下來,我們創(chuàng)建 MemoryStream 以容納圖片,并且以 MemoryStream 和文件格式作為參數(shù)調(diào)用 image 對象的 Save 方法。
Web 服務(wù)一旦投入運行,就能等待客戶端了。在本例中,客戶端是一個 windows 應(yīng)用程序。但它也可以是能與 Web 服務(wù)交互的 html、wml、xml等等。
我們使用一個代理服務(wù)類讓系統(tǒng)將 Web 服務(wù)看成本地類。代理服務(wù)類可以看成介于本地應(yīng)用程序和 Web 服務(wù)之間的通道。它能將你的要求翻譯成 Web 服務(wù)器的語言。
有一個小巧玲瓏的公用程序 wsdl.exe 可以充當代理服務(wù)類。順便提一句,WSDL 是 Web 服務(wù)描述語言的縮寫,它是一種用于描述 Web 服務(wù)的 XML 格式,可以讓人們知道代理服務(wù)類都做些什么。通過把 WSDL 作為 web 服務(wù)的查詢字串就能得到它的 wsdl 描述:
myWebService.asmx?WSDL
這個 url 可以作為參數(shù)傳遞給 wsdl.exe:
wsdl http://local/myservice.asmx?WSDL
我們根據(jù) Web 服務(wù)類命名 C# 代碼文件。比如上面那段代碼的文件名就是 Binaries.cs 。現(xiàn)在把它編譯成一個 module :
csc/t:module Binaries.cs
然后把下列源代碼文件和 .NET 模組文件放在同一目錄下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
public class BinaryConsumer : Form
{
Button btnLoad;
PictureBox pbxBinaryImage;
Binaries myService;
public BinaryConsumer()
{
myService = new Binaries();
this.btnLoad = new Button();
this.pbxBinaryImage = new PictureBox();
this.btnLoad.Location = new Point(176, 240);
this.btnLoad.Name = "btnLoad";
this.btnLoad.Text = "Load Image";
this.btnLoad.Click += new EventHandler(this.btnLoad_Click);
this.pbxBinaryImage.Location = new Point(24, 8);
this.pbxBinaryImage.Name = "pbxBinaryImage";
this.pbxBinaryImage.Size = new Size(232, 224);
this.pbxBinaryImage.TabStop = false;
this.AutoScaleBaseSize = new Size(5, 13);
this.ClientSize = new Size(292, 273);
this.Controls.AddRange(new Control[] {
this.btnLoad,
this.pbxBinaryImage});
this.Name = "BinaryConsumer";
this.Text = "BinaryConsumer";
}
static void Main()
{
Application.Run(new BinaryConsumer());
}
private void btnLoad_Click(object sender, System.EventArgs e)
{
byte[] image = myService.GetBinary();
MemoryStream memStream = new MemoryStream(image);
Bitmap bm = new Bitmap(memStream);
pbxBinaryImage.Visible = false;
pbxBinaryImage.Image = bm;
pbxBinaryImage.Visible = true;
}
}
這就是我們的客戶端。大部份代碼都是用戶接口,不管它,直接看這一段:
private void btnLoad_Click(object sender, System.EventArgs e)
{
byte[] image = myService.GetBinary();
MemoryStream memStream = new MemoryStream(image);
Bitmap bm = new Bitmap(memStream);
pbxBinaryImage.Visible = false;
pbxBinaryImage.Image = bm;
pbxBinaryImage.Visible = true;
}
這段代碼用于輸出圖片。它被關(guān)聯(lián)到了按鈕 btnLoad 上。單擊此按鈕,Web 服務(wù)就會把請求的圖片傳過來。注意,我們在一開始就創(chuàng)建了一個 Binaries 對象 myService 。再有,是否還記得,我們的 Web 服務(wù)包含一個 GetBinary 方法 ,作用是返回圖片的確切字節(jié)數(shù)??蛻舳撕?Web 服務(wù)之間的各種調(diào)用和數(shù)據(jù)經(jīng)過 SOAP 序列化,以 HTTP 方式來回傳遞。整個過程就是這樣。
注意:代碼可以從 http://www.cshrp.net/content/code/binaries.zip 下載到。經(jīng)過編譯的代理服務(wù)類在 beta 2 下運行通過,但是在 Final 版則不行,除非使用新的代理服務(wù)類 wsdl.exe 。好了,祝一切順利。
- 1泛普OA辦公軟件實施工作備忘錄
- 2Novell OneNet重拳出擊Web服務(wù)
- 3咨詢機構(gòu)的上海OA
- 4聯(lián)合國《2003 年電子商務(wù)與發(fā)展報告》
- 5誰來搭建電子政務(wù)
- 6RDF介紹
- 7上海OA管出企業(yè)"錢途"
- 8知識與創(chuàng)新互動
- 9上海OA中的PM思想(孫洪波)
- 10Web服務(wù)中的信息安全:軟肋 or 機會?
- 11雙方各退一步 Sun終于加盟WS-I
- 12誰是全球最受贊賞的知識型企業(yè)
- 13企業(yè)上海OA新論:從理論到應(yīng)用
- 14協(xié)同OA辦公軟件項目實施過程中交付物的質(zhì)量控制
- 15Web服務(wù)給我們帶來了什么?
- 16信息流動性:新價值的源泉
- 17文獻綜述:戰(zhàn)略聯(lián)盟中知識資源的共享利用(by AMT 王玉榮)
- 18上海OA的功能框架
- 19IONA推出電子政務(wù)WEB服務(wù)方案
- 20Java Web Services的遠端調(diào)用
- 21Web服務(wù)安全技術(shù)大比拼
- 22KM vs. HRM
- 23企業(yè)知識門戶的IT實現(xiàn)
- 24異中有同同中有異
- 25《電子內(nèi)容》雜志信息科技100強(Econtent 100)(陳贛峰)
- 26“知識經(jīng)濟”時代 增強企業(yè)上海OA
- 27利用已有優(yōu)勢 Novell不甘在Web服務(wù)作配角
- 28企業(yè)老總不可再忽視上海OA
- 29開啟“黃金屋”--析個人上海OA
- 30如何運用上海OA促進發(fā)展
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114