使用ASPNET构造一个简单的XML Web服务是相对容易的然而XML Web服务的真正的强大的功能只有等你研究了基础结构以后才能领悟XML Web服务是建立在NET框架和公共语言运行时间基础上的一个XML Web服务可以利用这些技术例如ASPNET支持的性能状态管理和验证全都可被用来构造XML Web服务
XML Web服务的基础结构是构建来符合象SOAPXML和WSDL这样的行业标准并且它允许其他的平台的客户端与XML Web服务互操作只要一个客户端可以发送符合标准的SOAP消息依据格式化的服务描述那么这个客户端可以调用一个使用ASPNET创建的XML Web服务(不管客户端存在于何种平台)
当你使用ASPNET构造一个XML Web服务时它自动支持客户端使用SOAPHTTPGET和HTTPPOST协议通讯即使HTTPGET和HTTPPOST支持使用URL编码的变量名/变量值对来传送消息支持这两个协议的数据类型也没有支持SOAP协议的数据类型丰富在SOAP中使用XML把数据传送到XML Web服务或从XML Web服务取回消息你可以使用支持丰富的数据类型集的XSD模式定义复杂的数据类型使用ASPNET构造一个XML Web服务的开发者不必明确地定义复杂的数据类型他们可以只构造一个管理类ASPNET处理定义到一个XSD模式的映射类和到XML数据的映射对象实例以便通过网络传输
重要的是要注意XML Web服务并不能取代DCOM我们应该说XML Web服务是跨越使用行业标准的平台通信的一种消息传递基础结构
因为ASPNET提供了为XML Web服务内部工作的基础结构开发者可以集中精力来实现他们的特定的XML Web服务的功能使用ASPNET开发一个XML Web服务从下面三步开始
创建一个带有asmx扩展名的文件
在这个文件里面使用一条指令声明XML Web服务
定义组成XML Web服务功能的XML Web服务方法
XML Web服务是一个强大的技术用于提供可通过因特网变成访问的服务下面的建议将帮助你创建高效的XML Web服务
XML Web服务既支持同步的又支持异步的客户端和存放XML Web服务的服务器之间的通信在同步通信情况下客户端发送一个对服务的请求到服务主机服务器上等待响应这防止客户端在等待结果的时候执行其它的操作然而异步通信导致客户端在等待相应的时候继续处理其它的任务客户端在可用的时候响应服务请求的结果
当你使用Web服务描述语言工具(Wsdlexe)来创建你的代理类的时候它产生类中的方法的标准的同步版本和异步版本异步版本由两个方法组成称为Begin和EndBegin方法用于初始化XML Web服务而End方法取得结果
使用异步通信能够改善系统使用率和避免客户端在它等待XML Web服务结果的时候的延迟
下面的代码示例显示如何从一个客户应用程序产生一个到XML Web服务
<C#%>%@PageLanguage=C#%>
<Net%>%@ImportNamespace=SystemNet%>
<html>
<scriptlanguagescriptlanguage=C#runat=server>
voidEnterBtn_Click(ObjectSrcEventArgsE)
{
MyMathMathmath=newMyMathMath();
//CalltoAddXMLWebservicemethodasynchronously
//andthenwaitforittocomplete IAsyncResultresult= mathBeginAdd(ConvertToInt(NumText)
ConvertToInt(NumText) null null);
//Waitforasynchronouscalltocomplete
resultAsyncWaitHandleWaitOne();
//CompletetheasynchronouscalltoAddXMLWebservicemethod
floattotal=mathEndAdd(result);
//DisplayresultsinaLabelcontrol
TotalText=Total:+totalToString();
}
</script>
<body>
<formactionformaction=MathClientaspxrunat=server>
<fontfacefontface=Verdana>
Enterthetwonumbersyouwanttoaddandthenpress theTotalbutton
<p> Number: <asp:textboxidasp:textboxid=Num runat=server/> + Number:
<asp:textboxidasp:textboxid=Num runat=server/> = <asp:buttonidasp:buttonid=Total_Button text=Total OnClick=EnterBtn_Click runat=server/>
<p>
<asp:labelidasp:labelid=Totalrunat=server/>
</font>
</form>
</body>
</html>
[VisualBasic]
<%@PageLanguage=VB%> <%@ImportNamespace=SystemNet%>
<html>
<scriptlanguagescriptlanguage=VBrunat=server>
SubEnterBtn_Click(SrcAsObjectEAsEventArgs)
DimmathAsNewMyMathMath()
CalltoAddXMLWebservicemethodasynchronously
andthenwaitforittocomplete DimresultAsIAsyncResult=_ mathBeginAdd(ConvertToInt(NumText)
_ ConvertToInt(NumText)
_ Nothing_ Nothing)
Waitforasynchronouscalltocomplete resultAsyncWaitHandleWaitOne()
CompletetheasynchronouscalltoAddXMLWebservicemethod DimaddtotalAsSingle=mathEndAdd(result)
DisplayresultsinaLabelcontrol
TotalText=Total:&addtotalToString()
EndSub
</script>
<body>
<formactionformaction=MathClientaspxrunat=server>
<fontfacefontface=Verdana>
Enterthetwonumbersyouwanttoaddandthenpress theTotalbutton
<p>
Number: <asp:textboxidasp:textboxid=Num runat=server/> + Number:
<asp:textboxidasp:textboxid=Num runat=server/> = <asp:buttonidasp:buttonid=Total_Button text=Total OnClick=EnterBtn_Click runat=server/>
<p>
<asp:labelidasp:labelid=Totalrunat=server/>
</font>
</form>
</body>
</html>
以上介绍ASPNET构造XML Web服务