2012-05-08 28 views
1

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サービスを呼び出す方法はありますか?

ありがとうございました!

+0

Afaik wpfはasmxの代替品です。 1つまたはどちらかを使用しています。 Asmxは今日までにはほとんど時代遅れです – Independent

+0

コメントありがとうございましたJonas。あなたはWCFを意味しましたか? –

+0

はい、もちろんWCFです。しかし、それはサイドノートです。あなたの問題がWebサービスに関連しているかどうか、またはGUIの応答性に問題があるかどうかはわかりません.GUIの応答性は、Taskではなく新しいThreadで要求を開始することで解決できます。 – Independent

答えて

0

アプリケーションをVS2010に接続してデバッグすると、UIがフリーズします。アプリケーションを単独で実行すると、アプリケーションはフリーズしませんでした。デバッガと何か関係があります。

関連する問題