我不得不每次在不同參數的循環中調用約100次web服務方法。 Web服務只有同步方法。目前我正在一個控制檯應用程序中測試它,並且在同步進行數據時需要十分鐘的時間才能獲取數據!異步調用同步webservice方法
我想要的: 並行運行10個請求。完成後,執行接下來的十個呼叫。 這當然應該是異步的。
該功能將託管在IIS託管的wcf服務中。
概述: 客戶端調用使用參數一次WCF服務。 wcf服務方法應該異步調用另一個web服務一百次並將最終數據保存到Excel中。
我看過,那Task.Run在Web應用程序中使用時不是一個好主意。
那麼,如何在Web上下文中異步調用同步Web服務方法?
我使用的CRM Microsoft.Xrm.Sdk,版本= 7.0.0.0,文化=中性公鑰= 31bf3856ad364e35
var orders = _serviceProxy.RetrieveMultiple(new FetchExpression(strXmlFetch));
RetrieveMultiple得到其中查詢被定義並執行所請求的XML片段(strXmlFetch)。 方法駐留在這裏:
命名空間 Microsoft.Xrm.Sdk.Client
類 OrganizationServiceProxy
public EntityCollection RetrieveMultiple(QueryBase query);
引擎蓋下的客戶端SDK確實主叫RetrieveMultiple時follwoing。
using (OrganizationServiceContextInitializer organizationServiceContextInitializer = new OrganizationServiceContextInitializer(this))
{
entityCollection = base.ServiceChannel.Channel.RetrieveMultiple(query);
return entityCollection;
}
我還沒有實現任何東西,因爲我需要異步執行請求的起點。
您可以使用Parallel.ForEach(https://msdn.microsoft .com/en-us/library/system.threading.tasks.parallel.foreach(v = vs.110).aspx) – Evk
@Evk網絡IO的並行API,從來不是一個好主意,會浪費資源,它應該是Async-Await,在內部調用同步方法,或者可能是Async(如果可用) –
但是OP說他的web服務只有同步方法。當然最好是利用異步IO,但問題狀態是不可能的。如果您將使用async \ await和Task.Run調用此同步方法 - 將不會改變任何內容。 – Evk