2011-04-20 11 views
1

私は今いくつかの新しいことを学ぶために簡単なチャットアプリケーションを作っていますが、現在ログインしているユーザーリストを追加しますチャット。またDataConctractありWCF DuplexサービスからSilverlightクライアントにデータ(SQLまたはLINQ)をプッシュする方法

 public ObservableCollection<User> GetUserList() 
    { 
     ObservableCollection<User> users = new ObservableCollection<User>(); 

     IEnumerable<User> userEnu; 
     userEnu = from u in _clientDic 
        select new User 
        { 
         UserName = u.Key 
        }; 

     foreach (User user in userEnu) 
     { 
      users.Add(user); 
     } 

     IEnumerable<IDuplexClient> clients; 
     clients = from p in _clientDic 
        select p.Value; 

     foreach (IDuplexClient item in clients) 
     { 
      item.DisplayUserList(users); 
     } 
     return users; 
    } 

ユーザーにcoresspondingこと: だから私はこれをしませんでした。とにかく このメソッドは、辞書にあるすべてのユーザーを取得し、ObservableCollectionに配置します。

私がやりたいことは、このコレクションからユーザーにデータをプッシュすることです(ユーザーのログまたはログアウト)。

は、これまでのところ私は手動でのみ手動

_client.GetUserListAsync() 

を呼び出すことにより、サーバからデータを取得するために管理しました。トラフはSilverlightアプリでボタンを押す。 しかし、これは私がデュプレックス接続を使用している理由ではなく、新しいデータがあるかどうかをチェックするサーバーへの過渡的な呼び出しのためにユーザー(またはクライアントアプリケーション)を強制します。私はサーバーが新しいデータをクライアントにプッシュするようにしたい。

[ServiceContract] 
public interface IDuplexClient 
{ 
    [OperationContract(IsOneWay = true)] 
    void DiplayMessage(string message); 

    [OperationContract(IsOneWay = true)] 
    void DisplayUserList(ObservableCollection<User> userColl); 
} 

ここにサービス契約があります。正直なところ私はこれが関連しているかどうかは分かりませんが、場合によっては投稿します。

答えて

0

あなたはこれを使用できます。pollingDuplexHttpBindingCheck this

+0

私は知っています。それが私のサンプルチャットアプリケーションのやり方です。ユーザー間でメッセージを送信することは問題ありません。実際の問題はここでは、コレクションからサーバープッシュデータを作成する方法です(LINQまたはDictionaryを使用してDataBaseから抽出します)。 Unforutnelty私はコレクションのデータを、ユーザー間で通常のテキストメッセージを送信するのと同じ方法で送信することはできません。私がしてはいけないのは、もし何か変更があればサーバーチェックコレクションを作成し、もしそれらがintrested(同じ部屋、チャンネル、ゲームなど)のすべてのクライアントにそれらの変更をプッシュするならば、 –

関連する問題