当前位置:文档之家› webservice接口开发

webservice接口开发

Microsoft .NET体系结构中非常强调Web Service,构建Web Service接口对.NET Framework开发工具有很大的吸引力,因此很多讲建立Web Service机制的文章都是使用.NET Framework开发工具的。

在这篇文章中我们将谈论下面几个方面的问题1、客户端怎样和Web Service通信的2、使用已存在的Web Service创建代理对象3、创建客户端。

这包括:Web 浏览器客户端Windows应用程序客户端WAP客户端最好的学习方法是建立一个基于真实世界的实例。

我们将使用一个已存在的Web Service,这个Web Service从纳斯达克获得股票价格,客户端有一个简单的接口,该接口的外观和感觉集中了建立接口的多数语句。

客户端描述三种客户端都接受客户输入的同一股票代码,如果请求成功,将显示公司名和股票价格,如果代码不可用,将显示一个错误信息。

客户端都设置有"Get Quote" 和"Reset"按钮以初始化用户的请求。

开发中的注意事项我使用visual 作为我的集成开发环境,beta版没有结合.NET Mobile Web,因此,我们需要使用文本编辑器创建wap客户端,下一个版本的visual 将整合入.NET Mobile Web 。

客户端怎样与Web Service通讯我们先复习一下Web Service的功能,在我得上一篇文章中曾展示一幅图(如图一),a点的用户将通过Internet执行远程调用调用b点web 服务器上的东西,这次通讯由SOAP和HTTP完成。

我们实际执行了b 点web 服务器上的方法吗?对于新手来说这是一个关键问题,由此你可以想到一系列的安全威胁,作为系统管理员我们不可能让随便什么人使用我们的web资源,让怀有恶意的人破坏敏感数据,而且也不能不提到带宽问题。

我们还记得这是一个分布式应用程序,因此我们还不得不关心数据的配置。

为解决这些问题,我们需要复制在用户web 服务器上的对象行为,在我们的例子中,我们需要复制b点Web Service针对a点的功能,这就意味着我们要创建充当原始web servcie行为的代理对象(proxy object),这个代理对象象原始Web Service那样具有所有的数据接口。

那么我们怎样得到公共数据接口的呢?各位是否还记得Web Service代码中的关键字Web only,每一个Web only的方法都会被复制到代理对象中,这样将保护我们的敏感数据,避免受到来自Web Service终端(比如:b点)的有恶意的黑客的攻击。

这种方法我们称为在a、b之间进行的"对象数据同步交换",这一过程称为创建"对象代理".现在看看图1的修正版,如下图:代理对象是Web Service的基础慨念,所以创建Web Service的第一步是创建代理对象,然后我们可以通过多种平台(Web浏览器, WAP, Personal Digital Assistant [PDA], SOAP客户端)从代理对象获得数据。

创建代理Web Service对象在.NET Framework中携带了一个创建代理对象的工具"WebServiceUtil.exe",在MS_DOS快捷窗口使用这个工具创建代理对象。

语法如下:WebServiceUtil /c:proxy /pa:HTTP://yourDomain/someFolder/yourWebService.asmx?SDL/c:proxy 指示编译器创建一个代理对象/pa:<WebServerURL>找到sdl文件的路径,最后面的"?SDL"目的是使Web Service获得SDL订约上面的是必须要的参数,现在解释一下其他重要参数:/disco:<FileName>创建一个Discovery文件,对不知道精确的url地址的用户而言,Discovery文件是找到Web Service的机制之一。

它是一个提供WebService的简要说明的xml文件,visual 工程将自动创建一个缺省的Discovery文件作为新工程的一部分,也可以启动"Dynamic Discovery"自动跟踪,/l:<Language Code>语言可以是C#,Visual Basic或者jscript等,如:/l:Csharp./n:<Namespace>该类所在的名字空间。

该名字空间的所有类均可访问这个代理对象。

/o:<Location>表示放置创建的文件的位置。

缺省为现行目录。

/i:<Namespace>附加的名字空间,该名字空间是将输入该类的名字空间。

/protocol:<protocol Name>应用的协议,如: SOAP, HTTP GET或HTTP POST。

缺省值为:SOAP 下图是一个创建代理对象的例子这个命令在当前目录下创建了一个叫LiveQuote.cs的文件。

这是一个在WebServiceClients名字空间中的C#文件,当你创建客户端时,将认识到WebServiceClients名字空间的重要性。

现在编译C#类,便产生了一个连接客户端工程的DLL文件。

,将其置于"bin" 目录下。

这样就在bin目录下创建了一个叫LiveQuotes.dll的文件。

如果想了解有关编译c#类的情况可以参考.NET SDK帮助文档。

用这两个命令创建了一个代理对象,现在我们准备从Web Service获得数据。

代理对象具有所有的公共接口,可访问任何商业逻辑函数,我们甚至不需要注册DLL文件就可以办到。

我们只需要编译源代码并插入bin目录下的dll文件即可。

这一切对于Web 服务器访问DLL文件足够了。

如果你不熟悉的配置机制你也许会感到困惑,不注册dll文件是为了让操作系统验证它。

我们仅将它放在bin目录下.NET Framework在运行时将带上它。

现在我们创建客户端,创建一个客户端的步骤是:1、创建一个代理对象的实例2、在代理对象上执行方法调用3、捕获从Web Service返回的xml格式的数据4、写一个特殊的客户端控件显示结果创建Web 页客户端Web服务监听器监听HTTP GET, HTTP POST和SOAP 方法调用。

首先我们用Visual 创建一个Web 工程打开new project对话框,在project type栏选择visual c# project,在template栏中选择web application,创建一个新工程并在默认的web服务器下创建一个虚拟目录LiveQuotes_Clients,系统同时在DriveName/wwwroot目录下创建一个相同名字的物理目录。

2)右击工程的"References",在弹出的菜单中单击add References点击"project"选项,导航到代理对象DLL3)使用Toolbox Web form controls创建文件,如果你学过vb,那么这是一件非常轻松的工作。

我将默认文件名WebForm1.aspx修改为Client_WebForm_POST.aspx,当我向web 窗体插入控件时,后台自动在一个叫Client_WebForm_POST.cs的文件中生成c#代码,当引用dll文件时,我们希望系统能自动插入相关代码,但是它没有这样做,这是 试用版的一个小故障,我们需要手工输入下面这行代码以访问WebServiceClients名字空间。

using WebServiceClients;代理对象livequotes.DLL属于WebServiceClients名字空间,因此我们需要通过代码访问WebServiceClients名字空间,我们还需要写一些代码处理用户交互事件,比如点击按钮:public void btn_GetQuote_Click (object sender, System.EventArgs e){LiveQuotes ProxyLiveQuotes = new LiveQuotes();try{label_PriceValue.Text =ProxyLiveQuotes.MSNGetLastQuote(txt_CompanyCode.Text).ToString();label_NameValue.Text =ProxyLiveQuotes.MSNGetCompanyName(txt_CompanyCode.Text).ToString();}catch{label_PriceValue.Text = "0.0";label_NameValue.Text = "The Company data is not available";}}public void btn_Reset_Click (object sender, System.EventArgs e){label_PriceValue.Text = "0.0";label_NameValue.Text = " ";}完整的代码见附录1,由于可能输入错误的公司代码,因此我们用try..catch捕获错误并处理例外。

4)点击Debug ->Start开始编译代码并显示浏览器现在我们验证一下,输入一个公司代码,可以看到返回了公司名和股票价格。

默认情况下Visual 使用Get方法,不过可以修改html表单属性将"method = POST" 改为"method = GET"即可客户端为windows应用程序用Visual 为Web Service创建一个Windows应用程序客户端也非常容易,按照一下步骤即可:1)打开New Project窗口,在Project Type栏选择Visual C#,在Templates框中选择Windows Application2)右击References,在弹出的菜单中点击Add Reference3)点击.NET References"添加"System.Web.Services.dll,引入控制台和Web 客户服务是一个好的编程习惯。

4)点击"Project",把LiveQuotes.dll作为一个引用加入工程。

5)现在该为应用程序创建窗体了,从左面的工具箱中拖放控件(如:标签,按钮等),visual 将在后台自动生成c#代码。

相关主题