什么是XML Web Service?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名與空間、網(wǎng)頁空間、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。對(duì)于初識(shí)XML Web Service并想快速上手的人,可能希望快速了解它的創(chuàng)建和調(diào)用方法。本文將用一個(gè)小例子來講述如何用Visual Studio 2008來創(chuàng)建Web Service以及如何來調(diào)用它。例子中的Web Service將根據(jù)客戶程序的請(qǐng)求來返回一幅圖像。
1. 創(chuàng)建Web Service項(xiàng)目
打開VS2008,選擇File/New/Project菜單項(xiàng),在打開的New Project對(duì)話框中,依次選擇Visual C# -> Web -> ASP.NET Web Service Application,然后輸入項(xiàng)目名稱(Name),存放位置(Position)和解決方案名稱(Solution Name),點(diǎn)擊“OK”生成項(xiàng)目。此例中我們用AnnotationWebService作為項(xiàng)目和解決方案的名稱(見圖1)。
圖 1:New Project對(duì)話框
2. 增加一個(gè)Web Service
在VS2008的Solution Explorer中點(diǎn)擊AnnotationWebService項(xiàng),選擇Project/Add new item菜單項(xiàng),在打開的Add New Item對(duì)話框中,依次選擇Web/Web Service,然后輸入Web Service的名稱(Name),點(diǎn)擊“Add”來增加一個(gè)Web Service。此例中我們用ImageService作為Web Service的名稱(見圖2)。
圖 2:Add New Item對(duì)話框
之后,我們?cè)赟olution Explorer中會(huì)看到這樣的項(xiàng)目目錄(見圖3)。(注意:系統(tǒng)在創(chuàng)建項(xiàng)目時(shí)會(huì)缺省地增加一個(gè)Web Service,名字為Service1,可以點(diǎn)擊其右鍵菜單中的Delete項(xiàng)將其刪除。)
圖 3:Solution Explorer
3. 為 Web Service編碼
右鍵點(diǎn)擊ImageService.asmx,選擇View Markup,可以打開此文件,我們可以看到如下一行:
<%@ WebService Language="C#" CodeBehind="ImageService.asmx.cs" Class="AnnotationWebService.ImageService" %>
它指示ImageService的代碼在ImageService.asmx.cs文件中。我們右鍵點(diǎn)擊ImageService.asmx,選擇View Code,打開ImageService.asmx.cs文件,增加我們的服務(wù)代碼,此例中,我們編寫一個(gè)根據(jù)給定的文件名讀取圖像并返回給客戶端的方法GetImage(見下面代碼)。
using System.IO; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace AnnotationWebService { ////// Summary description for ImageService /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class ImageService : System.Web.Services.WebService { [WebMethod(Description="Request an image by name")] public byte[] GetImage(string imageFileName) { byte[] imageArray = GetBinaryFile(imageFileName); if (imageArray.Length < 2) { throw new SoapException("Could not open image on server.", SoapException.ServerFaultCode); } else { return imageArray; } } private byte[] GetBinaryFile(string fileName) { string fullPathFileName = HttpContext.Current.Request.PhysicalApplicationPath + fileName; if (File.Exists(fullPathFileName)) { try { FileStream fileStream = File.OpenRead(fullPathFileName); return ConvertStreamToByteBuffer(fileStream); } catch { return new byte[0]; } } else { return new byte[0]; } } public byte[] ConvertStreamToByteBuffer(Stream imageStream) { int imageByte; MemoryStream tempStream = new MemoryStream(); while ((imageByte = imageStream.ReadByte()) != -1) { tempStream.WriteByte((byte)imageByte); } return tempStream.ToArray(); } } }
4. 在IIS中增加虛擬目錄(Virtual Directory)
打開IIS控制臺(tái)程序,右鍵點(diǎn)擊Default Web Site,選擇增加New/Virtual Directory菜單項(xiàng),在打開的Virtual Directory Caption Wizard對(duì)話框中輸入虛擬目錄別名(Alias),此例中我們輸入AnnotationWebService,點(diǎn)擊“Next”,再選擇ImageService.asmx所在的目錄,再點(diǎn)擊“Next”直到“Finish”。(注:以上描述是基于XP SP3環(huán)境。)
5. 為Web Service創(chuàng)建代理(Proxy)
在VS2008中,打開一個(gè)Windows應(yīng)用程序解決方案(.sln),此例中我們打開一個(gè)叫做AnnotationApp的解決方案。在要調(diào)用Web Service的項(xiàng)目上(比如此例中我們選擇用DataLib)點(diǎn)擊右鍵,選擇Add Web Reference菜單項(xiàng)(如果從未添加過Web Reference,可能會(huì)看不到Add Web Reference菜單項(xiàng),我們可以先選擇Add Service Reference菜單項(xiàng),在彈出的Add Service Reference對(duì)話框中點(diǎn)擊“Advanced”,再在彈出的Service Reference Settings對(duì)話框里點(diǎn)擊“Add Web Reference”),在彈出的Add Web Reference對(duì)話框中,輸入我們要調(diào)用的Web Service的URL,此例中我們輸入:
http://localhost/AnnotationWebService/ImageService.asmx
然后點(diǎn)擊“Go”,ImageService就會(huì)顯示在下面的Web Page里,在Web reference name編輯框輸入Web引用的名字,為了避免再用ImageService這個(gè)名字,這里我們輸入ImageWebService(見圖4),然后點(diǎn)擊“Add Reference”來添加Web引用。
圖 4:Add Web Reference對(duì)話框
這會(huì)在Solution Explorer中增加一個(gè)Web Reference(見圖5)。
圖 5:Web Reference被添加
添加的引用是Image Service的代理代碼,其中包括一個(gè)與ImageService同名的類,派生于System.Web.Services.Protocols.SoapHttpClientProtocol。這樣在客戶代碼中就可以像調(diào)用自己的Assembly里的方法一樣調(diào)用ImageService的GetImage方法。
6. 客戶程序調(diào)用Web Service
在客戶程序中需要調(diào)取圖像的地方增加如下代碼(注:代碼中的Image類不是.Net Framework類庫(kù)中的Image類,是客戶程序中的一個(gè)類):
ImageService imageService = new ImageService(); Bitmap bitmap; try { byte[] image = imageService.GetImage("half-bred panthers.jpg"); MemoryStream memoryStream = new MemoryStream(image); bitmap = new Bitmap(memoryStream); _image = new Image(_viewportTransformer, bitmap); } catch (WebException e) { // Exception handling }
然后,可以將圖像顯示出來。
7.運(yùn)行客戶程序來測(cè)試Web Service調(diào)用
編譯運(yùn)行客戶程序,Web Service被成功調(diào)用并返回所調(diào)用的圖像(見圖6)。
圖 6:運(yùn)行結(jié)果
關(guān)于什么是XML Web Service問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。