2012-03-22 10 views
0

私はSilverlightとWCF Riaサービスの新機能です。私はWPFとWinFormsでのバックグラウンド経験があります。他のプロジェクトからのWCFの消耗

今、私は基本的にリモートサーバーからデータを取得するWebページ上にあるSilverlightアプリケーションを開発しています。

私は、WebサービスとWCFの使用方法と使用方法を説明する多数のフォーラムと記事を読んでいます。私はmsdn walkthroughに従って、DBからデータを取得するシンプルなアプリケーションを作成する方法についてはうまくいきました。

問題は、UIコントロールにWCF関連のコードやリソースが欲しくないということです。 は今、私は、階層化プログラミングアーキテクチャを使用して使用しています:

UI - > BLL - > DAL

をこれらの各要素は、同じ溶液中で単一のプロジェクトです。私のDALプロジェクトは、サーバーとcomunicatesするWebサービス(WCF Ria)です。

私は、次のコードで私のDALのプロジェクトに単純なクラス(ユーザーサービス)および方法(GetUsers)を持っている:

 LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery()); 
     loadOp.Completed += (sender, args) => 
     { 
      users = new List<UserObj>(); 
      foreach (var v in loadOp.Entities) 
      { 
       u_WEBUSERS uweb = v as u_WEBUSERS; 
       UserObj u = new UserObj(); 

       u.Nome = uweb.nome; 
       u.Morada = uweb.morada; 
       users.Add(u); 
      } 
     }; 
     return users; 

事は私のユーザーがnullを返すオブジェクトということです。私がブレークポイントを持っていれば、最初にメソッドが終了し、完了したイベントを呼び出すだけです。

GetUsers()にデータベース情報を返す方法はありますか? 多分私が使用している階層化されたアーキテクチャは、私が望むものに適したものではありません... ありがとう

答えて

1

public void LoadUsers(Action<IEnumerable<UserObj>> callBack) 
{ 
    LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery()); 
    loadOp.Completed += (sender, args) => 
    { 
     users = new List<UserObj>(); 
     foreach (var v in loadOp.Entities) 
     { 
      u_WEBUSERS uweb = v as u_WEBUSERS; 
      UserObj u = new UserObj(); 

      u.Nome = uweb.nome; 
      u.Morada = uweb.morada; 
      users.Add(u); 
     } 
     if(callBack != null) 
      callBack(users); 
    }; 
} 
+0

ありがとうございます。それは完璧に働いた。私はほとんど希望を諦めていた。私はAction delgatesの使用については決して考えなかった。どうもありがとう – David

0

同期と非同期のコードを一緒にミックスしています。完了したイベントを設定していますが、ハンドラを指定しないと完了するまで呼び出しは戻りません。 example hereを参照してください。だからあなたのコードは次のようになります。あなたは、単純なActionまたはAction<T>デリゲートを使用することができます

LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery()); 
users = new List<UserObj>(); 
foreach (var v in loadOp.Entities) 
{ 
    u_WEBUSERS uweb = v as u_WEBUSERS; 
    UserObj u = new UserObj(); 

    u.Nome = uweb.nome; 
    u.Morada = uweb.morada; 
    users.Add(u); 
} 
return users; 
+0

申し訳ありませんが、それだけでは動作しません。ユーザーオブジェクトは常にコンテンツなしで返されます。 – David

関連する問題