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