ASP.NET创建Web服务之异步Web服务

ASP.NET创建Web服务之异步Web服务,第1张

ASP.NET创建Web服务之异步Web服务,第2张

为了提高调用阻碍线程长期运行的方法的XML Web services方法的性能,您应该考虑将它们发布为异步XML Web services方法。实现异步XML Web service方法允许线程在返回线程池时执行其他代码。这允许在线程池中添加有限数量的线程,从而提高系统的整体性能和可伸缩性。

通常,调用执行输入/输出操作的方法的XML Web service方法适合异步实现。这种方法的例子包括与其他XML Web服务通信、访问远程数据库、执行网络输入/输出以及读写大文件。这些方法都花费大量时间来执行硬件级操作,而将执行XML Web服务方法的块留给线程。如果XML Web service方法是异步实现的,则可以释放线程来执行其他代码。

无论XML Web服务方法是否异步实现,客户端都可以与之异步通信。在中使用代理类。net客户端生成的Web服务描述语言工具(WSDL.EXE)来实现异步通信,即使XML Web服务方法是同步实现的。类包含与每个XML Web service方法进行异步通信的Begin和End方法。因此,XML Web服务方法是异步的还是同步的取决于性能。

注意:实现异步XML Web services方法对客户机和服务器上的XML Web services之间的HTTP连接没有影响。HTTP连接既不是封闭的,也不是共享的。

实现异步XML Web服务方法。

实现异步XML Web服务方法遵循. NET Framework异步设计模式。

一个同步XML Web服务方法被分解成两个方法;它们中的每一个都有相同的基本名称——一个以begin开头,另一个以End开头。

Begin方法的参数表包含该方法的函数中的所有in和by引用参数。

通过引用,参数被列为输入参数。

倒数第二个参数必须是AsyncCallback。AsyncCallback参数允许客户端提供方法调用完成时要调用的委托。当一个异步XML Web service方法调用另一个异步方法时,可以将此参数传递给该方法的倒数第二个参数。最后一个参数是一个对象。对象允许调用方向方法提供状态信息。当一个异步XML Web service方法调用另一个异步方法时,可以将此参数传递给该方法的最后一个参数。

返回值的类型必须是IAsyncResult。

下面的代码示例是一个Begin方法,它带有一个特定于方法函数的字符串参数。

[c#]
[web method]
Public IAsyncResult begingetauthorrofiles(String Author,
AsyncCallback callback,Object async state)
[Visual Basic]
< web method()> _
Public Function begingetauthorrofiles(ByVal Author为String,_
ByVal callback为AsyncCallback,ByVal asyncState为Object)_
为IAsyncResult

End方法的参数表由IAsyncResult类型的out和by引用参数组成。

返回值与同步XML Web服务方法的类型相同。

通过引用,参数被列为输出参数。

下面的代码示例是一个返回用户定义的AuthorRoyalties模式的End方法。

[c#]
[web method]
公共作者版税EndGetAuthorRoyalties(IAsyncResult
async result)

[Visual Basic]
< web method()> _
公共函数EndGetAuthorRoyalties(ByVal async result As _
IAsyncResult)作为AuthorRoyalties

下面的代码示例是一个异步XML Web services方法,它与另一个XML Web services方法进行异步通信。

[c#]
使用系统;
使用系统。网络服务;
[web service(Namespace = " http://www . contoso . com/")]
public class my service:web service {
public remote service remote service;
public my Service(){
//为
//要调用的XML Web Service创建代理类的新实例。
remote service = new remote service();
}
//定义Begin方法。
[Web method]
public IAsyncResult BeginGetAuthorRoyalties(String Author,AsyncCallback callback,object asyncState) {
//开始与不同的XML Web
//服务进行异步通信。
返回remoteService。BeginReturnedStronglyTypedDS(作者,
回调,异步状态);
}
//定义结束方法。
[Web method]
public author royalties EndGetAuthorRoyalties(iasyncresult){
//从其他XML Web服务返回异步结果。
返回remoteService。EndReturnedStronglyTypedDS(async result);
}
}

[Visual Basic]
导入系统。Web.Services
_
公共类MyService
继承web service
公共remoteService作为RemoteService

Public Sub New()
MyBase。New()
'为
'要调用的XML Web service创建代理类的新实例。
remote service = New remote service()
End Sub

定义Begin方法。
< Web method()> _
公共函数BeginGetAuthorRoyalties(ByVal Author作为字符串,_
ByVal callback作为AsyncCallback,ByVal asyncState作为对象)_
作为IAsyncResult
'开始与不同的XML Web
'服务进行异步通信。
返回remoteService。BeginReturnedStronglyTypedDS(Author,_
callback,async state)
End Function
'定义End方法。
< Web method()> _
Public Function EndGetAuthorRoyalties(ByVal async result As _
IAsyncResult)As author royalties
'从另一个XML Web service返回异步结果。
返回remoteService。EndReturnedStronglyTypedDS(async result)
End函数
End类

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » ASP.NET创建Web服务之异步Web服务

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情