ASP.NET网页编程之ASP.NET Web Service
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。asp.net|web如今Internet正在不休地开展着,在互联网使用刚入手下手的时分,我们扫瞄的网页只是静态的,不成交互的。而如今跟着手艺的日趋开展,将供应给网页扫瞄者一个可编程的Web站点。这些站点将在构造、使用、服务、驱动上加倍严密的分离在一同,这些站点将经由过程一些使用软件间接毗连到另外一个Web站点,这些可编程的Web站点比拟传统的web站点来讲,将变得加倍能反复利用,也加倍智能化!.net平台给我们供应了一种运转情况,即公用言语运转情况(CLR,CommonLanguageRuntime)。对CLR来讲,它供应了一种内置机制来创立一个可编程的站点,、关于Web程序开辟者和VB程序员来讲,这将是分歧、熟习的。这类模子是能够反复利用,也能够再扩大。它包括了开放的Internet尺度(HTTP,XML,SOAP,SDL)。以便它能被网页扫瞄者会见。
ASP.NET利用.asmx文件来对WebServices的撑持。.asmx文件和.aspx文件一样都属于文本文件。它包括在.aspx文件当中,成为ASP.NET使用程序的一部分。
上面我们将举一个复杂的例子来先容.asmx文件,我们仍是从"Hello,World"这个典范的例子提及,代码以下:
<!--文件名:WebServicesisam.asmx-->
<%@WebServiceLanguage="VB"Class="HelloWorld"%>
ImportsSystem.Web.Services
PublicClassHelloWorld:InheritsWebService
PublicFunction<WebMethod()>SayHelloWorld()AsString
Return("HelloWorld")
EndFunction
EndClass
申明:
1.编码最入手下手必需举行WebService声明,从而界说这个文件为一个WebService。并且,在统一行中设置好编程言语的范例。
2.然后,引进名字空间System.Web.Services。注重,这个名字空间属于最基础的元素,必需要包括它。
3.接着,声明service中的功效模块,也就是类模块,这里的类名叫HelloWorld。这个类来历于基类WebService,并且应当是public范例。
4.最初,界说service的可会见办法。在暗示办法的标记后面,要设置好自界说属性。对应于C#言语,属性值就是;对应于VB,就是。假如没有设置这个属性,那末这个办法就不克不及从service中会见。一个部分使用可使用任何的public范例的类,可是只要具有的类才能够经由过程SOAP被远程地会见。
当对service的哀求产生时,.asmx文件将主动地被ASP.NET运转情况所编译。随后的哀求就能够由缓冲的预编译范例工具实行。
为了测试编写好的代码,我们需用一个撑持ASP.NET的Web服务器。假定这个Web服务器的称号叫做server1,其上有一个假造目次test。请跟从上面步骤入手下手测试:
1.将代码保留为HelloWorld.asmx
2.放到Web服务器Foo的假造目次Bar下
3.翻开InternetExplorer5,在地点栏输出http://server1/test/HelloWorld.asmx
这时候,我们将看到关于这个WebService的公用办法-也就是那些标志为WebMethod属性的字符,并得知挪用这些办法可使用的协定,好比SOAP大概HTTPGET。
在InternetExplorer的地点栏中输出http://Foo/Bar/HelloWorld.asmx?SDL后,将发生基于服务形貌言语(ServiceDescriptionLanguage:SDL)语法的具有不异信息的XML文件。这个SDL文件十分主要,客户端就是利用它来会见service。
从客户端举行会见:
除同意开辟者利用的创立WebServices的手艺之外,Microsoft的.net框架给客户端供应了一套会见并利用WebServices的精巧且深邃的工具和代码。因为WebServices是基于如复杂工具会见协定SOAP(SimpleObjectAccessProtocol)和HTTP如许的开放协定尺度的,从而,我们就能够利用这类客户端手艺利用非ASP.NET的WebServices。固然,这也需用高程度地分解ASP.NETWebServices和这类客户端手艺。
SDK中有一个工具叫做WebServiceUtil.exe,我们可使用它来下载一个WebServices的SDL形貌言语,并创立表达这个Service的代办署理类。好比,当我们输出以下命令,就能够创立一个叫做HelloWorld.cs的代办署理类:
WebServiceUtil/c:proxy/pa:http://someDomain.com/someFolder/HelloWorld.asmx?SDL
这个类看起来与后面创立的类十分类似。它包括一个办法SayHelloWorld,该办法前往一个字符串。将这个代办署理类编译到一个使用程序中,然后挪用这个代办署理类的办法,了局就是:经由过程HTTP,这个代办署理类包装SOAP哀求,然后吸收SOAP编码呼应,最初搜集成为一个字符串。
请看关于WebService的一个客户端例程:
客户端会见的文件:clint.aspx,内容以下:
<%@ImportNamespace="DataTypesService"%>
<html>
<style>
div
{
font:8ptverdana;
background-color:cccccc;
border-color:black;
border-width:1;
border-style:solid;
padding:10,10,10,10;
}
</style>
<scriptlanguage="VB"runat="server">
PublicSubPage_Load(SenderAsObject,EAsEventArgs)
DimDAsDataTypes=NewDataTypes()
Message1.InnerHtml=D.SayHello()
Message1.InnerHtml=Message1.InnerHtml&D.SayHelloName("Bob")
Message3.InnerHtml=Message3.InnerHtml&D.GetMode()
DimMyIntArrayAsInteger()=D.GetIntArray()
DimMyStringAsString="ContentsoftheArray:<BR>"
ForI=0ToMyIntArray.Length-1
MyString=MyString&MyIntArray(I)&"<BR>"
Next
Message2.InnerHtml=Message2.InnerHtml&MyString
DimMyOrderAsOrder=D.GetOrder()
Message4.InnerHtml=Message4.InnerHtml&"<BR>OrderID:"&MyOrder.OrderID
Message4.InnerHtml=Message4.InnerHtml&"<BR>Price:"&MyOrder.Price
DimMyOrdersAsOrder()=D.GetOrders()
Message5.InnerHtml=Message5.InnerHtml&"<BR>OrderID:"&MyOrders(0).OrderID
Message5.InnerHtml=Message5.InnerHtml&"<BR>Price:"&MyOrders(0).Price
EndSub
</script>
<bodystyle="font:10ptverdana">
<H4>UsingDataTypeswithWebServices</H4>
<h5>MethodsthatreturnaPrimitive(String):</h5>
<divid="Message1"runat="server"/>
<h5>MethodsthatreturnanArrayofPrimitives(Integers):</h5>
<divid="Message2"runat="server"/>
<h5>MethodthatreturnsanEnum:</h5>
<divid="Message3"runat="server"/>
<h5>MethodthatreturnsaClass/Struct:</h5>
<divid="Message4"runat="server"/>
<h5>MethodthatreturnsanarrayofClasses/Structs:</h5>
<divid="Message5"runat="server"/>
</body>
</html>
在客户端程序中,我们利用<%@ImportNamespace="DataTypesService"%>来引进DataTypesService这个我们自界说的名字空间。然后在程序中只是挪用了DataTypesService中的办法。
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
页:
[1]