Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF-复合IAsyncResult_Wcf_Web Services_Asynchronous - Fatal编程技术网

WCF-复合IAsyncResult

WCF-复合IAsyncResult,wcf,web-services,asynchronous,Wcf,Web Services,Asynchronous,我有一个WCF服务,我想在其上使用异步模式,因为它主要调用一系列web服务,然后在所有web服务调用返回后处理结果 但是,WCF中的异步模式只支持在BeginXXX方法中返回一个IAsyncResult 我想知道是否有人有过创建复合IAsyncResult的经验,可以在所有web服务返回后发出信号,或者有任何其他想法来处理这个问题?我认为基本上,您需要创建自己的自定义IAsyncResult实现,并认真记录您的请求。我假设你会同时发出内部请求,然后等到所有请求都完成后再返回,对吗 如果是这样,那

我有一个WCF服务,我想在其上使用异步模式,因为它主要调用一系列web服务,然后在所有web服务调用返回后处理结果

但是,WCF中的异步模式只支持在BeginXXX方法中返回一个IAsyncResult


我想知道是否有人有过创建复合IAsyncResult的经验,可以在所有web服务返回后发出信号,或者有任何其他想法来处理这个问题?

我认为基本上,您需要创建自己的自定义IAsyncResult实现,并认真记录您的请求。我假设你会同时发出内部请求,然后等到所有请求都完成后再返回,对吗


如果是这样,那么我要做的是创建一个定制的IasyCcREST,同时在内部跟踪与每个内部调用相关联的每个IASYCICS结果,然后只考虑我的自定义IasyCcREST结果(这意味着两个信号都是等待句柄,以及触发任何回调)。当所有的内部请求都完成后。

谢谢你的反馈,这就是我想做的,我希望有人能给我提供参考。就我需要采取的方法而言,那么是的,你是对的——它基本上是在不同的位置并行调用一些不同的服务(例如,进行车辆查找,进行邮政编码查找)。当你说簿记时,这是否意味着你对一般的方法有顾虑;只是您必须小心地实现它,因为它很容易出错:)。簿记的意思是,您必须跟踪每个调用的状态,并确保处理每个调用的错误等,这通常意味着,除其他外,决定在N个服务调用中的一个失败时要做什么(即,您是否返回错误或部分响应等)。实现IAsyncResult其实并不难,这里有一个示例:啊,好的。我同意这看起来不太糟糕,但正如您所说的“容易出错:)如果我们必须调用数据库上的几个长时间运行的过程(例如,每个过程2秒),您认为这种模式也合适吗?原因是我们的一些遗留功能在数据库中有很多业务逻辑,因此需要一段时间才能在那里执行,而同步运行这些功能似乎是浪费web服务器资源(最多可以调用6次)。显然,这增加了代码的复杂性,但提高web服务器的可伸缩性似乎是值得的。这取决于您是否缺少IIS/WCF线程池,但如果您有大量其他并发调用,如果您将IIS/WCF线程的处理转移到您自己的东西中,您可能会获得一些改进的行为。