XMLデータをWebサービスに非同期でアップロードするWPFアプリケーションがあります。私は非UIスレッドからWebサービスを呼び出します:ASMX Webサービス - SoapHttpClientProtocol.InvokeAsync
Task.Factory.StartNew(() => {
WebServiceHelper.ImportMarketDataAsync(....);
});
wsdl.exeを使用してプロキシを生成しました。
1)*メソッド名*非同期
2)開始*メソッド名* &終了*メソッド名*
第1の方法はSoapHttpClientProtocolを使用しています。プロキシクラスは、非同期のWebサービス機能を呼び出すには、2つの異なる方法を提供します。 InvokeAsyncを使用し、2番目のメソッドはSoapHttpClientProtocol.BeginInvokeを使用します。どちらの場合でも、プロキシがInvoke関数(InvokeAsyncまたはBeginInvoke)にヒットした場合、UIスレッド内からWebサービス呼び出しが呼び出されるため、UIスレッドがビジーであるため、アプリケーションが応答しないように見えます。たとえば、250要素のコレクションのforeachループでasync関数を呼び出すと、すべての非同期呼び出しが完了するまでUIがフリーズします。
メインのUIスレッドをブロックせずにasmx Webサービスを呼び出す方法はありますか?
ありがとうございました!
Afaik wpfはasmxの代替品です。 1つまたはどちらかを使用しています。 Asmxは今日までにはほとんど時代遅れです – Independent
コメントありがとうございましたJonas。あなたはWCFを意味しましたか? –
はい、もちろんWCFです。しかし、それはサイドノートです。あなたの問題がWebサービスに関連しているかどうか、またはGUIの応答性に問題があるかどうかはわかりません.GUIの応答性は、Taskではなく新しいThreadで要求を開始することで解決できます。 – Independent