1

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

よろしくお願いします!

4

1 に答える 1

0

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

于 2012-07-09T18:53:43.710 に答える