はじめまして、弊社ではwcfサービスを開発しております。これはサーバーとして使用され、非常にうまく機能します。アプリケーションにログインした後、どのユーザーがログインしているかを確認したいという顧客からの要望があります。CallbackContract (いくつかの wcf チャット アプリケーションに基づく) について読みました。どうすればこの目標を達成できるでしょうか?
1 に答える
ここで尋ねられた同様の質問
サーバー内のログインユーザーを確実に管理できます。私はそのような状況に対処するための個人的なパターンを作成しました。通常は次のようになります。
クライアントに関する必要なすべての情報を保持するクライアント クラスを WCF サーバー内に作成します。
サービスに 2 つのメソッドを作成します: logIn、logOut。login メソッドは、保存したいクライアントに関するすべての情報を収集できる必要があります。クライアント インスタンスを一意に識別できるプロパティを定義してください。クライアントがサーバーに接続すると、login メソッドが呼び出され、サーバーがクライアントから情報を収集して保存できるようになります。コールバックを使用する場合、これは、クライアント obejt で CallBack コンテキスト オブジェクトを保存する場所です。Client オブジェクトを WCF サーバー インスタンスに保存できるようになりました (私は辞書を使用しています)。クライアントがログアウトすると、ログアウト メソッドが呼び出され、サーバーはエントリを削除します。
- 接続されたクライアントがまだ接続されているかどうかを定期的にチェックするサーバーに KeepAlive メソッドを作成します (ネットワーク障害やアプリのクラッシュの場合、クライアントはログアウト メソッドを呼び出さない場合があります)。
サーバーでクライアントを管理するには、これが最も簡単な方法だと思います (これが最善とは言いません)。クライアントを一意に識別する方法がある限り、同じコンピューターから複数のクライアントを取得しても問題はありません (クライアントがログインしたときにコンテキストを保存します)。
最後の質問ですが、複数のサービスを持つことは問題ではありません。実際、提供するサービスごとに異なるコントラクト (およびエンドポイント) を持つ同じ WCF サーバーがあります。コントラクトはすべて同じ WCF サーバー インスタンスに存在するため、すべてのコントラクトが接続されたクライアント リストにアクセスできます。
さらにご質問がございましたら、喜んでお答えいたします。
ここで、必要な WCF サービスを実際に構築するために必要なコードを見つけることができます