0

.Net Webサービスを使用するWindowsPhoneアプリを開発しています(私も開発しています)。Webサービスメソッドを呼び出すときは、非同期で実行し、UIをブロックしません。たとえば、これは到着便のリストをサーバーに要求するためのコードサンプルです。

service.MobileWSSoapClient Proxy { get; set; }
Proxy = new service.MobileWSSoapClient();
Proxy.GetArrivalsCompleted += proxy_GetArrivalsCompleted;
Proxy.GetArrivalsAsync(searchFilter);

このようにして、同じメソッドまたは別のメソッドを再度呼び出す自由をユーザーに与えます(例:到着リストの更新または特定の到着の検索)。ユーザーがサービスへの新しい呼び出しを生成した場合、アプリは最初の呼び出しを「キャンセル」し、最後の呼び出しの結果のみを表示する必要があります。すでにサーバーに送信されたWebサービス呼び出しをキャンセルすることは技術的に不可能だと思います。サーバーの応答を待ってから無視する必要があります。それを知っていると、どういうわけかその呼び出しを廃止としてマークすることが役立つでしょう。その廃止された呼び出しの応答としてエラーを受け取るだけで十分です。私が想像する/必要とするものの擬似コードを書きます。

void proxy_GetArrivalsCompleted(object sender, service.GetArrivalsCompletedEventArgs e){

   if (e.Error == null){ 
       // DO WORK
   }
   else 
   {
      if(e.Error == Server Exception || e.Error == Connection Exception){
         MessageBox.Show("error");
      }
      else if (e.Error == obsolete call){
        // DO NOTHING
      }
   }

前もって感謝します。

4

1 に答える 1

0

シナリオにはBackgroundWorkerを使用できます。そのため、ユーザーが Web サービスを再度呼び出したときに、サービス呼び出しを終了するバックグラウンドワーカー プロセスをキャンセルできます。

BackgroundWorker の使い方はこちら

于 2013-03-09T12:27:55.467 に答える