私が最初に達成したいことを正確に説明しようとします。クライアントからクライアントへのメッセージング
ユーザーAが特定のフォームを開くときに2人のユーザーがWindowsフォームアプリケーションを使用しているとします。そのユーザーのみが変更を加えることができるようにフォームの基礎となるデータレコードにロックが適用されます。
ユーザーBは、ユーザーAが既に開いているレコードへの参照を含むすべてのレコード(グリッド内)のリストを持っています。ユーザーAがレコードを開くと、ユーザーBのレコードのリストが表示されます。行の横にロックアイコンが表示され、レコードが使用中であることを示します。
これは私たちがメッセージングで行うことの簡単な例ですが、ユーザーAはユーザーBがそれについて知っておく必要がある何かを行います。
私はC#とOpenFire Jabber Server用にJabber-netを使ってシステムを実装しました。基本的には、メッセージを送信するときに、新しい行がデータベースのメッセージテーブルに挿入されます。メッセージテーブルは、SqlDependancyオブジェクトを使用してサービスクライアントによって監視されるため、新しいメッセージが準備されると、サービスは関連メッセージを作成し、JabberとOpenFireサーバー経由で目的のクライアントに送信します。
これは問題なく動作しますが、OpenFireのすぐれた機能は、私が達成しようとしているものではないインスタントメッセージングをサポートするためです。私が持っている問題は、ユーザーが2つのアプリケーションコンテキスト(つまり、テストとライブ)にログインしている場合、User @ server/resourceのJID構造がリソースの通知を受けないため、OpenFireはメッセージを送信するアプリケーションを特定できないということです。
現在、私が現在OpenFireとJabber-netを使用している方法は正しくありません。
達成したいものを達成するために使用できるパターンがあります。つまり、メッセージを送信するクライアントにメッセージを送信します。クライアントはメッセージを送信するクライアントを指定できます。 XMPPは答えのように思えました。なぜなら、自分のメッセージタイプを解析して解析できるからです。
私のアプリケーションは、Windows Forms、.NET 3.5 C#アプリケーションです。
個人的には、それは良い選択肢と消耗品の選択肢のようです。 – kenny