2011-08-04 4 views
0

をブロック:私のクライアント側のWCFは、私が法持つWCFのDataServiceを使用していますコール

[OperationContract] 
    public List<string> GetAges() 
    { 
     return _registrationData.GetAges(); 
    } 

を、私はこのようにそれをインスタンス化:

_registrationDataServices = new RegistrationDataServiceClient(); 

それが今デリゲート

_registrationDataServices.GetAgesCompleted += GetAgesCompleted; 
を公開

と関数呼び出し:

_registrationDataServices.GetAgesAsync() 

この問題は、サービスへの呼び出しが非同期になり、結果がデリゲート関数に含まれ、結果が戻ってくるまでサービスを呼び出して待機(ブロック)できるようにしたい、ということですWCFを使用して行われますか?

私は、データベースからのデータを必要とするSilverlightアプリケーションを持っているので、WCFは、私のデータアクセス層として.NETアセンブリから呼び出されている、WCFを使用する必要があります。

+2

可能な複製http://stackoverflow.com/questions/647481/how-i-can-implement-sync-calls-to-wcf-services-in-silverlight –

+0

Silverlightは、あなたがブロックすることができないように作られています。糸。なぜあなたはそれをする必要がありますか? – svick

+0

誰がRegistrationDataServiceClientクラスを作成しましたか?オンラインで利用できるドキュメントはありますか?非同期ではない.GetAges関数はありますか?実際にここで望むのは、関数の非同期バージョンです。 –

答えて

4

同期のSilverlight/WPFアプリケーションからWebサービスを呼び出すための非常に悪い習慣です。同期呼び出しは、Webサービスコールが終了するまでUIをハングし、ユーザーエクスペリエンスが低下します。 しかし、あなたがまだそれをお持ちの場合は、here is a very helpful linkです。

+3

私は悪い練習のコメントに完全に同意する。インターネットは面白い獣なので、あなたはいつも最悪のことがあなたの呼び出しに起こると想定するべきです。 –

0

は、同期的に呼び出さないでください - あなたは、UIスレッドをブロックします。ユーザーは通常、UIが凍結されていると、ソフトウェアがクラッシュしたと考えています。

は、理想的にあなたが戻ってくるの呼び出しを待っている間、番組の進捗状況」をアニメーション化し、モーダルビジーインジケータになるだろう、とあなたが完了イベントを受信したときにそれが消えます。

それでもUIスレッドをブロックすると、あなたのケースでOKだったと確信した場合でも、あなたは実際に同期的に呼び出すことはできません!それは理由のためにこの方法で設計されました - 流れに行ってください。

+0

GUIのBusyIndi​​catorオブジェクトを使用することができます。 –

関連する問題