2009-08-23 12 views
0

私のプロジェクトにWebサービスを使用するというアイデアを思いついたことで、いくつかのプロパティ(メソッド/イベント)が自動的に作成されていることに気付きました。私はCompletedイベントの目的を見ることができますが、非同期メソッドがどこで使われるか分かりません。WebService非同期メソッドの質問

WebMethod属性の宣言:

[WebMethod] 
    public string HelloBrad() 
    { 
     return "Hello Brad"; 
    } 

分離コードでのサービスの消費

localhost.Service1 service = new localhost.Service1();; 
    service.HelloBradAsync 
    service.HelloBradCompleted 
    service.HelloBrad 

誰かがHelloBradAsyncメソッドの使用法を説明してください可能性があります。

おかげで

答えて

3

非同期の方法論は、あなたのコードは、サーバーがメッセージを処理している間に実行を継続することができます。通常のservice.HelloBradコードを使用すると、Webサービスが応答を返すまでスレッドはブロックされます。

代わりに、HelloBradAsyncを呼び出すとすぐに次のコード行に移動します。サーバーが終了すると、「HelloBradCompleted」イベントの内部で応答します。

これは、Webサービスが実行中にプライマリスレッドをブロックしないようにするためのものであり、確かにビジネスを行う適切な方法です。プログラミングパラダイムを変更する必要があるかもしれませんが、そのメリットがコストを上回ることがわかります。

+0

"確かにビジネスを行う正しい方法です"私は同意しなければならないでしょう。 UIスレッド内でサービスを呼び出す場合にはシーンを非同期にすることができますが、ブロッキング呼び出しでサービスを呼び出す場合(たとえば別のWebService)にはそれを行う理由はありません。 –

+0

@Keivan:これは良い点です。コードの次の行に移動する前に戻り値が必要な場合は、ブロッキングWebサービス呼び出しが重要です。 – JustLoren

関連する問題