webservice接口开发.docx

上传人:b****8 文档编号:11319190 上传时间:2023-02-26 格式:DOCX 页数:25 大小:384.07KB
下载 相关 举报
webservice接口开发.docx_第1页
第1页 / 共25页
webservice接口开发.docx_第2页
第2页 / 共25页
webservice接口开发.docx_第3页
第3页 / 共25页
webservice接口开发.docx_第4页
第4页 / 共25页
webservice接口开发.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

webservice接口开发.docx

《webservice接口开发.docx》由会员分享,可在线阅读,更多相关《webservice接口开发.docx(25页珍藏版)》请在冰豆网上搜索。

webservice接口开发.docx

webservice接口开发

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

  在这篇文章中我们将谈论下面几个方面的问题

  1、客户端怎样和WebService通信的

  2、使用已存在的WebService创建代理对象

  3、创建客户端。

这包括:

    Web浏览器客户端

    Windows应用程序客户端

    WAP客户端

  最好的学习方法是建立一个基于真实世界的实例。

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

  客户端描述

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

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

  开发中的注意事项

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

  客户端怎样与WebService通讯

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

  我们实际执行了b点web服务器上的方法吗?

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

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

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

那么我们怎样得到公共数据接口的呢?

  各位是否还记得WebService代码中的关键字Webonly,每一个Webonly的方法都会被复制到代理对象中,这样将保护我们的敏感数据,避免受到来自WebService终端(比如:

b点)的有恶意的黑客的攻击。

这种方法我们称为在a、b之间进行的"对象数据同步交换",这一过程称为创建"对象代理".

  现在看看图1的修正版,如下图:

  代理对象是WebService的基础慨念,所以创建WebService的第一步是创建代理对象,然后我们可以通过多种平台(Web浏览器,WAP,PersonalDigitalAssistant[PDA],SOAP客户端)从代理对象获得数据。

创建代理WebService对象

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

  语法如下:

WebServiceUtil/c:

proxy/pa:

HTTP:

//yourDomain/someFolder/

       yourWebService.asmx?

SDL

/c:

proxy

指示编译器创建一个代理对象

/pa:

<WebServerURL>

找到sdl文件的路径,最后面的"?

SDL"目的是使WebService获得SDL订约

  上面的是必须要的参数,现在解释一下其他重要参数:

/disco:

<FileName>

创建一个Discovery文件,对不知道精确的url地址的用户而言,Discovery文件是找到WebService的机制之一。

它是一个提供WebService的简要说明的xml文件,visualstudio.NET工程将自动创建一个缺省的Discovery文件作为新工程的一部分,也可以启动"DynamicDiscovery"自动跟踪,

/l:

<LanguageCode>

语言可以是C#,VisualBasic或者jscript等,如:

/l:

Csharp.

/n:

<Namespace>

该类所在的名字空间。

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

/o:

<Location>

表示放置创建的文件的位置。

缺省为现行目录。

/i:

<Namespace>

附加的名字空间,该名字空间是将输入该类的名字空间。

/protocol:

<protocolName>

应用的协议,如:

SOAP,HTTPGET或HTTPPOST。

缺省值为:

SOAP

  下图是一个创建代理对象的例子

  这个命令在当前目录下创建了一个叫LiveQuote.cs的文件。

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

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

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

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

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

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

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

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

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

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

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

  现在我们创建客户端,创建一个客户端的步骤是:

   1、创建一个代理对象的实例

   2、在代理对象上执行方法调用

   3、捕获从WebService返回的xml格式的数据

   4、写一个特殊的客户端控件显示结果

创建Web页客户端

  Web服务监听器监听HTTPGET,HTTPPOST和SOAP方法调用。

首先我们用VisualStudio.NET创建一个Web工程

  打开newproject对话框,在projecttype栏选择visualc#project,在template栏中选择webapplication,创建一个新工程并在默认的web服务器下创建一个虚拟目录LiveQuotes_Clients,系统同时在DriveName/wwwroot目录下创建一个相同名字的物理目录。

  2)右击工程的"References",在弹出的菜单中单击addReferences

  点击"project"选项,导航到代理对象DLL

  3)使用ToolboxWebformcontrols创建asp.NET文件,如果你学过vb,那么这是一件非常轻松的工作。

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

  

usingWebServiceClients;

  代理对象livequotes.DLL属于WebServiceClients名字空间,因此我们需要通过代码访问WebServiceClients名字空间,我们还需要写一些代码处理用户交互事件,比如点击按钮:

publicvoidbtn_GetQuote_Click(objectsender,System.EventArgse)

{

 LiveQuotesProxyLiveQuotes=newLiveQuotes();

 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="TheCompanydataisnotavailable";

  }

}

publicvoidbtn_Reset_Click(objectsender,System.EventArgse)

{

 label_PriceValue.Text="0.0";

 label_NameValue.Text="";

}

  完整的代码见附录1,由于可能输入错误的公司代码,因此我们用try..catch捕获错误并处理例外。

  4)点击Debug->Start开始编译代码并显示浏览器

  现在我们验证一下,输入一个公司代码,可以看到返回了公司名和股票价格。

  默认情况下VisualStudio.NET使用Get方法,不过可以修改html表单属性将"method=POST"改为"method=GET"即可

客户端为windows应用程序

  用VisualStudio.NET为WebService创建一个Windows应用程序客户端也非常容易,按照一下步骤即可:

  1)打开NewProject窗口,在ProjectType栏选择VisualC#,在Templates框中选择WindowsApplication

  2)右击References,在弹出的菜单中点击AddReference

  3)点击.NETReferences"添加"System.Web.Services.dll,引入控制台和Web客户服务是一个好的编程习惯。

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

  5)现在该为应用程序创建窗体了,从左面的工具箱中拖放控件(如:

标签,按钮等),visualstudio.NET将在后台自动生成c#代码。

我们仅仅需要输入处理用户事件的代码即可。

 (完整的代码见附录2)

protectedvoidbtn_GetQuote_Click(objectsender,System.EventArgse)

{

 LiveQuoteswindowsClient=newLiveQuotes();

 try

 {

  label_PriceValue.Text=

      windowsClient.MSNGetLastQuote

      (txt_CompanyCode.Text).ToString();

  label_Name.Text=

      windowsClient.MSNGetCompanyName

      (txt_CompanyCode.Text).ToString();

 }

 catch

 {

  label_PriceValue.Text="0.0";

  label_Name.Text="TheCompanydataisnotavailable";

 }

}

protectedvoidbtn_Reset_Click(objectsender,System.EventArgse)

{

 txt_CompanyCode.Text="";

 label_Name.Text="";

 label_PriceValue.Text="";

}

  6)编译、执行客户端程序(visualstudio.NET的Debug->Start)

  7)验证一下,输入公司代码,你将得到公司名和来自NASDAQ的股票价格

  这段程序代码创建了一个代理对象,利用SOAP通过HTTP调用远程对象的函数调用,使用try..catch捕获非法的公司代码,并使应用程序转入错误处理。

 构建WAP客户端

  传统的wap使用纯无限标记语言(wml)编写,.NETMobileSDK使我们能够利用象asp.NET控件那样的东西设计wap接口,这样做比写wml脚本快得多。

  每一个.NET可移动页面的开始都要加上下面的语句

<%PageInherits="System.Mobile.UI.MobilePage"Language="C#"%>

<%RegisterTagPrefix="Mobile"Namespace="System.Mobile.UI"%>

  同样我们还是要访问livequotes.dll

<%ImportNamespace="WebServiceClients"%>

  下面是完整的代码

<%PageInherits="System.Mobile.UI.MobilePage"Language="C#"%>

<%RegisterTagPrefix="Mobile"Namespace="System.Mobile.UI"%>

<%ImportNamespace="WebServiceClients"%>

<scriptrunat="server"language="c#">

protectedvoidGetQuoteCommand_OnClick(Objectsender,EventArgse)

{

LiveQuotesProxyLiveQuotes=newLiveQuotes();

try

{

Code.Text="CompanyCode-"+CompanyCode.Text;

CompanyName.Text="Name-"+ProxyLiveQuotes.MSNGetCompanyName(CompanyCode.Text);

Price.Text="Price-"+ProxyLiveQuotes.MSNGetLastQuote(CompanyCode.Text);

}

catch

{

Code.Text="CompanyCode-"+CompanyCode.Text;

CompanyName.Text="Name-Thecompanydataisnotavailable";

Price.Text="Price-"+"0.0";

}

ActiveForm=SecondForm;

}

</script>

<Mobile:

Formrunat="server">

<Mobile:

Labelrunat="server">EntertheCompanyCode:

</Mobile:

Label>

<Mobile:

TextBoxrunat="server"id="CompanyCode"/>

<Mobile:

Commandrunat="server"OnClick="GetQuoteCommand_OnClick"Text="GetQuote"/>

</Mobile:

Form>

<Mobile:

Formrunat="server"id="SecondForm">

<Mobile:

Labelrunat="server"id="Code"/>

<Mobile:

Labelrunat="server"id="CompanyName"/>

<Mobile:

Labelrunat="server"id="Price"/>

</Mobile:

Form>

  微软.NETMobileWebSDK具有将IE作为WAP客户端的能力,这将加速开发过程。

我使用IE5.5模拟下面的WAP功能。

  在点击GetQuote按钮后,将得到下面的页面

  对所有的怀疑者而言,下面是一个熟悉的页面

  我们已经讨论了构建WebService的基础,我们通过PDA和SOAP客户端打开了通往WebService的道路。

  结束语

  本文集中讨论了微软的web服务,微软不是这个市场的唯一玩家,ibm和sun也都在为抢占市场份额拼命努力,下面ibm和sun关于WebService的站点

   IBM--HTTP:

//-106.ibm./developerworks/webservices/

   Sun--HTTP:

//.sun./software/sunone/portfolio/aws.html

  研究WebService时非常有兴趣的一件事,这个慨念已经叫嚷很久了,主要厂商都宣布支持WebService,但是时间将告诉我们,我们究竟能从这项技术获得些什么。

2.附录1

  2.1Web客户端代码

 

Client_WebForm_POST.aspx

<%Pagelanguage="c#"Codebehind="Client_WebForm_POST.cs"AutoEventWireup="false"Inherits="LiveQuotes_Clients.WebForm1"%>

<html><head>

 <metaname="GENERATOR"Content="MicrosoftVisualStudio7.0">

 <metaname="CODE_LANGUAGE"Content="C#"></head>

<body>

<formmethod="post"runat="server"name="webServiceForm">

 <tablecellspacing=1width=400border=0>

 <tr>

  <tdstyle="WIDTH:

16px;HEIGHT:

48px"bgcolor=#ffcc99>

   <fontstyle="BACKGROUND-COLOR:

#ffcc99"

          color=#ffcc99>

   </font>

  </td>

  <tdstyle="WIDTH:

161px;HEIGHT:

48px">

   <fontstyle="BACKGROUND-COLOR:

#ffcc99"

          face=Verdanasize=2>

   <strong>Webbrowser</strong></font></td>

  <tdstyle="HEIGHT:

48px">

   <fontstyle="BACKGROUND-COLOR:

#ffcc99">

   <fontface=Verdanasize=2>

   <strong>Client</strong>

   </font>

   </font>

  </td>

 </tr>

 <tr>

  <tdstyle="WIDTH:

16px"bgcolor=#ffcc99>

   <fontface=Verdanacolor=#ffcc99></font></td>

  <tdstyle="WIDTH:

161px">

   <asp:

Labelid=lable_CompanyCoderunat="server"

      font-names="Verdana"font-size="Smaller">

    CompanyCode

   </asp:

Label>

   <fontface=Verdana></font></td>

  <td>

   <asp:

TextBoxid=txt_CompanyCoderunat="server"

      font-names="Verdana"font-size="Smaller">

   </asp:

TextBox>

   <fontface=Verdana></font></td></tr>

 <tr>

  <tdstyle="WIDTH:

16px;HEIGHT:

30px"bgcolor=#ffcc99>

  </td>

  <tdstyle="WIDTH:

161px;HEIGHT:

30px">

   <asp:

Labelid=label_Namerunat="server"Width="102"

      Height="18"font-names="Verdana"

      font-size="Smaller">

    CompanyName

   </asp:

Label>

  </td>

  <tdstyle="HEIGHT:

30px">

   <asp:

Labelid=label_NameValuerunat="server"

      font-names="Verdana"font-size="Smaller">

   </asp:

Label>

  </td>

 </tr>

 <tr>

  <tdstyle="WIDTH:

16px;HEIGHT:

26px"bgcolor=#ffcc99>

  </td>

  <tdstyle="WIDTH:

161px;HEIGHT:

26px">

   <asp:

Labelid=label_Pricerunat="server"

     font-names="Verdana"font-size="Smaller">

    Price

   </asp:

Label>

  </td>

  <tdstyle="HEIGHT:

26px">

   <

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1