您好,欢迎访问一九零五行业门户网

详细介绍XML Web Service图文代码实例

对于初识xml web service并想快速上手的人,可能希望快速了解它的创建和调用方法。本文将用一个小例子来讲述如何用visual studio 2008来创建web service以及如何来调用它。例子中的web service将根据客户程序的请求来返回一幅图像。
1.       创建web service项目
打开vs2008,选择file/new/project菜单项,在打开的new project对话框中,依次选择visual c# -> web -> asp.net web service application,然后输入项目名称(name),存放位置(position)和解决方案名称(solution name),点击“ok”生成项目。此例中我们用annotationwebservice作为项目和解决方案的名称(见图1)。
图 1:new project对话框
2.       增加一个web service
在vs2008的solution explorer中点击annotationwebservice项,选择project/add new item菜单项,在打开的add new item对话框中,依次选择web/web service,然后输入web service的名称(name),点击“add”来增加一个web service。此例中我们用imageservice作为web service的名称(见图2)。
图 2:add new item对话框
之后,我们在solution explorer中会看到这样的项目目录(见图3)。(注意:系统在创建项目时会缺省地增加一个web service,名字为service1,可以点击其右键菜单中的delete项将其删除。)
图 3:solution explorer
3.       为 web service编码
右键点击imageservice.asmx,选择view markup,可以打开此文件,我们可以看到如下一行:
<%@ webservice language="c#" codebehind="imageservice.asmx.cs" class="annotationwebservice.imageservice" %>
它指示imageservice的代码在imageservice.asmx.cs文件中。我们右键点击imageservice.asmx,选择view code,打开imageservice.asmx.cs文件,增加我们的服务代码,此例中,我们编写一个根据给定的文件名读取图像并返回给客户端的方法getimage(见下面代码)。
using system.io; using system.web; using system.web.services; using system.web.services.protocols; namespace annotationwebservice { /// <summary> /// summary description for imageservice /// </summary> [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控制台程序,右键点击default web site,选择增加new/virtual directory菜单项,在打开的virtual directory caption wizard对话框中输入虚拟目录别名(alias),此例中我们输入annotationwebservice,点击“next”,再选择imageservice.asmx所在的目录,再点击“next”直到“finish”。(注:以上描述是基于xp sp3环境。)
5. 为web service创建代理(proxy)
在vs2008中,打开一个windows应用程序解决方案(.sln),此例中我们打开一个叫做annotationapp的解决方案。在要调用web service的项目上(比如此例中我们选择用datalib)点击右键,选择add web reference菜单项(如果从未添加过web reference,可能会看不到add web reference菜单项,我们可以先选择add service reference菜单项,在弹出的add service reference对话框中点击“advanced”,再在弹出的service reference settings对话框里点击“add web reference”),在弹出的add web reference对话框中,输入我们要调用的web service的url,此例中我们输入:
http://localhost/annotationwebservice/imageservice.asmx
然后点击“go”,imageservice就会显示在下面的web page里,在web reference name编辑框输入web引用的名字,为了避免再用imageservice这个名字,这里我们输入imagewebservice(见图4),然后点击“add reference”来添加web引用。
图 4:add web reference对话框
这会在solution explorer中增加一个web reference(见图5)。
图 5:web reference被添加
添加的引用是image service的代理代码,其中包括一个与imageservice同名的类,派生于system.web.services.protocols.soaphttpclientprotocol。这样在客户代码中就可以像调用自己的assembly里的方法一样调用imageservice的getimage方法。
6. 客户程序调用web service
在客户程序中需要调取图像的地方增加如下代码(注:代码中的image类不是.net framework类库中的image类,是客户程序中的一个类):
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.运行客户程序来测试web service调用
编译运行客户程序,web service被成功调用并返回所调用的图像(见图6)。
图 6:运行结果
以上就是详细介绍xml web service图文代码实例的详细内容。
其它类似信息

推荐信息