XMLデータをWebサービスに非同期でアップロードするWPFアプリがあります。UI以外のスレッドからWebサービスを呼び出します。
Task.Factory.StartNew(() => {
WebServiceHelper.ImportMarketDataAsync(....);
});
wsdl.exeを使用してプロキシを生成しました。プロキシクラスは、Webサービス関数を非同期的に呼び出す2つの異なる方法を提供します。
1)* MethodName * Async
2)Begin * MethodName *&End * MethodName *
最初のメソッドはSoapHttpClientProtocol.InvokeAsyncを使用し、2番目のメソッドはSoapHttpClientProtocol.BeginInvokeを使用します。
いずれの場合も、プロキシがinvoke関数(つまり、InvokeAsyncまたはBeginInvoke)にヒットすると、Webサービス呼び出しがUIスレッド内から呼び出されるため、UIスレッドがビジーであるため、アプリケーションが応答しなくなったように見えます。たとえば250個の要素のコレクションに対してforeachループで非同期関数を呼び出すと、すべての非同期呼び出しが完了するまでUIがフリーズします。
メインUIスレッドをブロックせずにasmxWebサービスを呼び出す方法はありますか?
よろしくお願いします!