質問

私の作成Silverlight2ユーザインタフェースへのリモート。が二つの同時のユーザーの異なるサイトとの交流の機器(オペレーターの機器とリモート研究員)に任意の数のオブザーバーのいないユーザと交流すだけを見ることができます。しかし、いつのアクティブユーザーの変更もこれらの変化は必ずすぐに反映されUiのすべてのユーザーなどパンやズームの画像または注釈または選択部分を、イメージの項目を追加するコレクションに表示されlistbox.前に使ってい観察可能な回収を容易に変更を反映したユーザーがすくみ化されたコードを生成するために他のユーザーです。できる世論調査のための変化からクライアント毎にそのようなプッシュ通知の方がよいでしょう。私は多読のための事例が見つからないものはなかなかいます。さまざまな商いが存在しますがセキュリティの問題とSilverlightとの交流、WCFサービスの意味する多数の例でいます。私は本来の時間のこのプロジェクト援助を必要とします。いてのご提案に適した簡単な例を示すか。私は経験豊富な開発いたところにある自Silverlight、WCFサービスが好は私の人を知っています。もthoいて公正な金額のASP.NET いないweb/Javascriptグルなのです。感謝。

役に立ちましたか?

解決

プッシュ通知は、新しいWCF PollingDuplexHttpBindingサポートを使用してSilverlight 2でサポートされます。 Silverlight SDKと共にインストールされる2つのアセンブリ( Silverlightアプリ用の1つ、WCFサーバー用の1つ)。

いくつかのブログがあります投稿と完全なサンプルアプリケーションは、接続されたクライアントにWCFサービスを自己ホストするコンソールアプリケーションサーバーからストック更新を「プッシュ」する方法を示します。また、各クライアントがストックに対してメモを追加し、それらのメモを他のすべての接続クライアントに同期させる(サーバーからプッシュする)方法を示します。

サンプルの最新バージョン(パート4)では、次のように2つのサーバーエンドポイントを使用して、SilverlightクライアントとWPFクライアントの両方でプッシュされた更新を同期する方法を示しています。

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace StockServer
{
    public class StockServiceHost : ServiceHost
    {
        public StockServiceHost(object singletonInstance, params Uri[] baseAddresses)
            : base(singletonInstance, baseAddresses)
        {
        }

        public StockServiceHost(Type serviceType, params Uri[] baseAddresses)
            : base(serviceType, baseAddresses)
        {
        }

        protected override void InitializeRuntime()
        {
            this.AddServiceEndpoint(
                typeof(IPolicyProvider),
                new WebHttpBinding(),
                new Uri("http://localhost:10201/")).Behaviors.Add(new WebHttpBehavior());

            this.AddServiceEndpoint(
                typeof(IStockService),
                new PollingDuplexHttpBinding(),
                new Uri("http://localhost:10201/SilverlightStockService"));

            this.AddServiceEndpoint(
                typeof(IStockService),
                new WSDualHttpBinding(WSDualHttpSecurityMode.None),
                new Uri("http://localhost:10201/WpfStockService"));

            base.InitializeRuntime();
        }
    }
}

WPFクライアントはWSDualHttpBindingエンドポイントに接続し、Silverlightクライアントは同じWCFサービスのPollingDuplexHttpBindingエンドポイントに接続します。アプリは、Silverlightクライアントのアクセスポリシー要件を処理する方法も示します。

クライアント(SilverlightまたはWPF)は、UIのストックに対してメモを追加できます。これらのメモはサーバーに伝播し、他のすべてのクライアントにプッシュされます。これは、どちらの方向の通信も示しており、アプリに必要なすべての通信が実行されることを期待しています。

ここで実行されているデモアプリケーション

他のヒント

ないことamを押してフレックスファンの少年ファッションが物を淡々はこのような建築を構築すべての当社のフレックス-ベースのアプリケーションを日常的に.こちらでは専門が細分化されすぎていていウーマノミクスプロジェクトなが適切に翻訳されSilverlight:

を組み合わせることにより、素材をまとめこの機能:

  1. 彗星パターン(HTTP対応いサーバにプッシュ通知見をWikipediaで調べるための詳細情報)
  2. JMSメッセージ通信論(公開/加入者のキュー)
  3. Adobe BlazeDSサーブレット

後者の項目を実装するコメットパターンは、アクアマリンふくしオブジェクトの総力を結集(Adobeのバイナリーの直列化形式ActionScript3オブジェクト)、橋梁、JMSキューや話題です。の場合を架橋するトピックを複数のフレックスのお客様の稼働ブラウザできる場合にのみ有用などの契約数をJMSます。そのクライアントを公開メッセージ(またはサーバサイドコード掲載の話題),クライアントのすべての契約者のメッセージを押しによBlazeDSの彗星パターンの実装です。

効果的に必要なものを探しや書きるコンポーネントの達成に向かBlazeDSます。きものを実装する必要があると一部のクライアントコードすると、彗星パターンのこのサーバ側の部品です。

は、WCFのパターン彗星と双方向メール?特に適合するHTTPおよびポート80又はポート443のためのボタンを使用します。まいそうないで見てみると見つかりませんで何のための双方向メッセージる必要があるロールライブ"とい符号といいます。

一部のものに注目してくださいサーバーを押し、webアプリケーション:

BlazeDS支援の二つのモードの実施に彗星のパターンが、実は3ポーリングオプションが無視されます。

  1. 長ポーリング
  2. HTTPストリーミング

のポーリングする必要がありますべき普遍的にサポート可能ほとんどのwebブラウザを推奨いたします。ですの効率化だけで支援しているのです。また時間をお過ごしくクライアントコードを試HTTPストリーミングやスイッチをポーリングが必要です。

としてのメッセージの仲介を提供できる公開/suscribe capatibility、ご利用をお考えのActiveMQ JMS.でオープンソースおよびフリーとのコミュニティ支援できる支援があります。プラスが使用できNMSに統合している.純ます。

このメッセージの仲介に座の中間層が実際に重要なので場所メッセージを配置する。場合はお客様との長ポーリング、なにいつも見逃さずに新しいメッセージ間にわないときは実際に接続します。

もう一つ考えるのは高い交通量のシナリオは多くの人がお客様のwebサイトなどでインターネット)が必要となりのアプローチのパターン彗星とラブル。

のフレックス/ドキュメンテーションシステムのBlazeDSサーブレットであるオープンソース)に変更された仕事と非同期モデルです。Javaのソケットリスナーが構築可能な利用NIOチャンネルおよびJavaの並行処理スレッドのExecutorプールがあります。TomcatのウェブサーバはNIOリスナーを、支援のための非同期Servlet3.0。BlazeDS特に改造されたもの桟橋webサーバです。下線は、拡張性の非同期アプローチというのは単一の物理的ウェブサーバーを支援する能力が向上げ20,000兼彗星イトに接続します。

微力ですが、応援させていただきまっています。NETプログラミングが使用されio力したようにJava1.1場合を除き非同期結果のハンドラ。これは同じことをやるために、次の方針に基づき環境の非同期ソケットリスナーに通Java NIOます。NIOチャネル実現できる支援は何百何千人ものソケット接続により比較的小さいスレッドプールがあります。がC#ます。純っては重要なrevsそが新しいio力を加えることに匹敵するものですNIOます。

私は、PollingDuplexHttpBindingがその名前(ポーリング)を明らかにするように 'true'プッシュ通知を実装しないことを明確にしたかっただけです。 msdnドキュメントから:

  

このバインディングを使用して構成された場合、Silverlightクライアントは定期的にネットワークレイヤー上のサービスをポーリングし、サービスがコールバックチャネルで送信する新しいメッセージをチェックします。サービスは、クライアントコールバックチャネルで送信されるすべてのメッセージをキューに入れ、クライアントがサービスをポーリングするときにそれらをクライアントに配信します。

ただし、Webサービスをポーリングする従来の方法よりも効率的です。各ポーリング後、サーバーは一定時間(1分など)チャネルを開いたままにし、その時間にメッセージが到着するとクライアントにメッセージを直接「プッシュ」します。クライアントは接続を繰り返し更新する必要があるため、サービスをポーリングします。

silverlightで実際のプッシュ通知を実装する場合は、ソケットを操作する必要があると思います。この件に関するDan Wahlinのブログ投稿を読むことをお勧めします。

あるいは、

プロキシ、ブリッジ、またはWebサーバーを含まないネイティブのsilverlight APIが必要な場合は、my-ChannelsのNirvanaをメッセージングミドルウェアとして使用できます。 my-ChannelsとそのショーケースサイトからNirvanaをチェックしてください。 (すみません、私は新しいユーザーであり、リンクを送信できません):

アレックス

編集:実際には正常に機能しています。 「隠し変数」にひどく噛まれた閉鎖中:(

SL2にPollingDuplexを使用しましたが、まだ生産の準備ができていないと思います。

私の主な問題は、同じマシン上のクライアントを区別しないという事実です。 2つのクライアントを実行すると、そのうちの1つはサーバーをポーリングできなくなり、タイムアウトで死にます。 2つのクライアントで異なるSessionIdがありますが、クライアント側では無視されます。

同様に、クライアントを殺してから新しいクライアントを作成すると、新しいクライアントはしばらく前のクライアントからプッシュ更新を取得します。

誰かが同じ問題に遭遇したか、SL3で修正されましたか?

実際には、さらにいくつかのデモコードを実行し、何らかの理由で、サービスがシングルトンではなくセッションベースになるようにInstanceContextModeとInstanceModeを指定する必要があることに気付きました(私が知る限り)。プルしたシンプルなデモコードには、明らかにパフォーマンスの問題があります。

この動作が文書化されていないのは非常に残念です。

私の組織では、Silverlight 2.0 / WCFプッシュ実装は、少なくとも「プライムタイムの準備ができていません」と、少なくともそれを使用する予定であることがわかりました。

XMPP / Jabberは、より適切な形式の獣であり、インターネットからリソースを取得するだけで、Silverlightでかなり簡単に実装できるため、最終的にXMPP / Jabberに移行しました。

Silverlight 3.0は、公開されている情報からわかることから、より新しい/より適切なプッシュ実装を実装すると信じています。

PollingDuplexHttpBindingは、おそらく最もエレガントな方法です。

Possilbyのそれほど複雑ではない方法の1つは、SilverlightクライアントからTCPソケットを使用することです。 Silverlightクライアントの1つが更新をプッシュする必要があるときはいつでも、呼び出す必要があるWCFサービスの名前またはその他の軽量情報を含むTCPメッセージを送信できます。

このアプローチをアプリケーションに使用し、うまく機能しています。

サイトのはるかにシンプルで強力なソリューション http://www.udaparts .com / document / Tutorial / slpush.htm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top