問題タブ [duplex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ファイアウォールを介してクライアントにWCFプッシュ?
WCF サーバーは、変更について WCF クライアントにどのように通知しますか?も参照してください。(コメントや長いポーリングなど、単純なポーリングよりも優れたソリューション)
クライアント ファイアウォールを介して、WCF でプッシュ テクノロジを使用する必要があります。これは一般的な問題であるに違いなく、理論的には機能することを知っています (以下のリンクを参照)。
要件:
- WCF
- クライアントは、tcp ポート 80 (netTcpBinding) を介してサーバーに接続します。
- サーバーは不規則な間隔 (1 分から数時間) で情報をプッシュバックします。
- ユーザーがファイアウォールを構成する必要はありません。サーバーのプッシュは、すべての受信ポートが閉じられているファイアウォールを通過する必要があります。これには、同じ接続での TCP デュプレックスが必要です。クライアント ファイアウォールでポートを開く必要があるため、デュアル バインディングは機能しません。
- クライアントは定期的に (おそらく 15 分ごとに) ハートビートをサーバーに送信するため、サーバーはクライアントがまだ生きていることを認識します。
- サーバーは WAS を使用した IIS7 です。
解決策は二重 netTcpBinding のようです。この情報に基づいて:
しかし、動作するコード サンプルをまだ見つけていません。Microsoft の WCF サンプルから "Duplex" と "TcpActivation" のサンプルを組み合わせてみましたが、うまくいきませんでした。動作するサンプル コードを教えてください。または、小さなサンプル アプリを作成してください。どうもありがとう!
wcf - 二重コールバック用の WSDualHttpBinding
二重コールバックに WSDualHttpBinding を使用すると、実際のシナリオで機能しますか? たとえば、ランダム ポートを使用する .NET アプリケーションがあるとします。サービスはクライアントのベース アドレスとポートをコールバック用に解決できますか?
.net - デュプレックス チャネルに障害が発生した場合、デュプレックス チャネルを自動的に再確立するにはどうすればよいですか?
WCF を使用して .Net 3.5 でクライアント/サーバー アプリケーションを開発しています。基本的に、長時間実行されているクライアント サービス (複数のマシン上) は、netTcpBinding を介してサーバーへの二重接続を確立します。次に、サーバーはクライアントのコールバック コントラクトを使用して特定のオンデマンド操作を実行し、クライアントは非同期方式で応答します (かなり標準的なものだと思います)。DuplexClientBase クラスをサブクラス化して、ほとんどの通信を処理します。
残念ながら、いずれかの側で何か問題が発生した場合 (ネットワーク障害、予期しない例外など)、チャネルに障害が発生したり中止されたりして、後続のすべての操作が失敗します。クライアントが障害を起こしたときに自動的にピックアップして操作を再試行する RecoveringClientBase クラスを作成することで、非二重チャネルでのこの制限を回避しました。
私の質問は、デュプレックス チャネルに障害が発生したことを判断する確立された方法はありますか? サーバーまたはクライアントのどこでこれを確認する必要がありますか? それができない場合、接続が再確立されるようにするために必要なオプションは何ですか?
更新:サーバーが障害が発生したコールバック チャネルを使用しようとする可能性がある二重チャネルに固有のアドバイスを探しています。したがって、チャネルに何かが発生したときにすぐに再接続/再サブスクライブするものが必要です。現時点では、チャネルの Closing イベントをリッスンしており、状態が Closed 以外の場合は再作成しています。ある程度は機能しますが、ハッキーに感じます...
asp.net - 共有セッションの概念はASP.NETに存在しますか?
私は単一のページで構成されるWebアプリケーション(ASP.NET)ゲームに取り組んでおり、そのページにはモノポリーに似たゲームボードがあります。私は、最良のアーキテクチャアプローチが何であるかを判断しようとしています。これまでに特定した主な要件は次のとおりです。
- 最大6人のユーザーが1つのゲーム状態オブジェクトを共有します。
- ユーザーは、ゲームの現在の状態、つまり、アクティブなユーザーが何をロールしたか、お互いのユーザーがどれだけのお金を持っているかなどを(比較的)最新の状態に保つ必要があります。
ゲームの状態をデータベースに保持することを考えましたが、ゲームの状態オブジェクト(たとえば、キャッシュ内)を最新の状態に保つことができる場合、データベースを更新し続けるのはやり過ぎのようです。たとえば、フローは次のようになります。
- ユーザーからデータの要求を受け取ります。
- データベースでデータを検索します。そのデータからオブジェクトを作成します。
- ユーザーがゲームの状態に基づいてリクエストを実行する権限を持っていることを確認します(つまり、それが本当に自分の番であるか、そのプロパティを購入するのに十分なお金があることを確認します)。
- ゲームオブジェクトを更新します。
- ゲームオブジェクトをデータベースに書き戻します。
- リクエストごとに繰り返します。
1台のサーバーが複数の同時ゲームを提供するとします。
- AJAXを使用してASP.NETページにリクエストを送信することを考えました。
- Silverlightを使用してWebサービスへのAJAXリクエストを使用することを考えました。
- SilverlightでWCFデュプレックスチャネルを使用することを考えました。
最善のアプローチが何であるか理解できません。すべてに欠点があるようです。誰かがこの種のことを経験していて、それらの経験を共有することに気を配っていますか?あいまいすぎる場合は、お気軽にご質問ください。ありがとう。
更新:上記の3つのオプションに基づいて、サーバーへのこの接続を実装する方法について誰か提案がありますか?
.net - WCF デュプレックス サービスと TCP ポートの枯渇
私はこれに頭を悩ませようとしています。私はビジネス固有のメッセージングアプリケーションを作成しています.5000〜10,000台のマシンをWCF経由でデータセンターに接続します(vpnなし、ネット全体)。これは主にアラート用であり、特定のクライアントにメッセージを直接送信できるようにする必要があります。WCF を使用すると、デュプレックス コントラクトを使用してこれらすべてを実行できますが、これだけ多くのクライアントを使用すると、 65535 ポート。
すべてのインバウンド接続は、選択したポートを介して着信すると仮定しますが、クライアントへのアウトバウンドはそれぞれ 1 つのポートを使用します。WCF ポート共有サービスがこの問題を解決するために何かを行っているのか、それとも 65535 ポートだけが IP アドレスに接続されているのか知りたいです。さらに言えば、MSN Messenger などはこの状況にどのように対処しているのでしょうか。確かに私はそこにたどり着けないかもしれませんが、少なくとも領域には入っています。
または、サービス エンドの WCF 二重契約は、クライアントの期間中、コールバック用にポートを開いたままにしますか?それとも解放しますか?
vba - VBA を使用して、HP プリンター ドライバー設定の [180 度回転] チェックボックス オプションをプログラムで制御できますか?
デュプレクサ ユニットを使用して、HP Laserjet プリンタ (4200/4350) の [180 度回転] 設定のオンとオフを切り替えようとしています。
ビジネスには「両面に印刷する」という要件があります。最大の制御のために、印刷時に (印刷マクロを介して) 操作できるようにしたいと考えています。ビジネスは動作します。
トレイの割り当て、印刷順序を制御し、両面印刷のオンとオフを切り替えることができます。ただし、回転オプションを制御する方法がわかりません(これをオンまたはオフに切り替えます)。
ブランケット以外に利用できるソリューションはありますか? すべてのドキュメント/ユーザーに対して、プリント サーバーでこのオプションを有効にしますか?
wcf - 方法: レスポンシブで利用可能な Wcf 二重通信
私は、WCF を使用してサーバーとクライアントの間で通信するアプリケーションに取り組んでいます。サーバーには、クライアントが他のサービスに関する情報を照会し、マスター サービスからの情報を使用して必要なサービスをサブスクライブできる 1 つのマスター サービスと共に、サービスの数が変化しています。 .
マスター サービスは、サブサービスが変更 (追加、削除など) されると、サブスクライブしているクライアントに通知を送信します。また、サブサービスは数秒ごとに通知を送信します。
これは、WCF のコールバック チャネルを使用する絶好の機会のように思えますが、セッションを使用する必要があります。また、クライアントに通知を送信するときに、いずれかのクライアントが不当に切断された場合、サービスが停止し、通知しようとします。タイムアウトしたとしても、しばらくすると他のクライアントには通知されず、クライアントは実際にはサブサービスの背後にあるアプリケーションを監視するための GUI であるため、これは受け入れられません。また、送信操作が成功しなかった場合、サービスはすぐに知る必要があるため、MSMQ を使用することはオプションではありません。
私が思いついた解決策は、http バインディングを使用して (送信が失敗したときにすぐにわかるようにするため)、クライアントで明示的なコールバック サービスを作成することですが、それには見栄えの悪いインフラストラクチャ コードをたくさん書く必要があります。
だから、私の質問は次のとおりです。WCFでこれを行うより良い方法はありますか。最も見栄えの良いオプションは Callback Contracts でした。これにより、次のクライアントに送信する前に 1 つのクライアントからの ack を待つことができなければ、コールバック サービスを手動で管理する必要がなくなるからです。
wcf - デュプレックス通信にはオープンチャネルが必要ですか?
短いバージョン: 二重通信を使用するクライアントで ChannelFactory を使用してチャネルを作成した場合、コールバックを受信するためにチャネルを開いたままにしておく必要がありますか、それとも ChannelFactory.Close() を呼び出すことができますか?
長いバージョン: 私は最初の WCF サービスを開発しており、独自の ClientProxy クラスを作成しました。これは、いくつかの異なるサービスを実装して 1 つに統合します。私は ChannelFactory を使用して各チャネルを作成しています。ネットでの一般的な読み取りでは、ChannelFactory をキャッシュする必要があることが示されていますが、実際のチャネルは必要な場合にのみ開いたり閉じたりする必要があります。
そこで、ChannelFactory.Open を呼び出してチャネルを開き、双方向操作 (後でコールバックを呼び出す一方向操作) を実行します。操作を要求した後で ChannelFactory.Close を呼び出してこのチャネルを閉じる必要がありますか? その場合でもコールバックを受け取りますか?
基本的なテストでは、接続を閉じるとコールバックを受け取ることが示されているようですが、確認したいだけです。また、ChannelFactory をキャッシュするこの方法は正しいですか?
ありがとう
wcf - WCF: デュプレックス チャネルでストリーミング モードを使用することは可能ですか?
WCF では、コントラクトをストリーミング モードに切り替えて、大きなメッセージを転送できます。
読んでテストした後、ストリーミングモードはデュプレックスチャネル(OneWayコールとコールバックインターフェースを備えたチャネル)では使用できないようです。
そうですか?デュプレックスとストリーミングは併用できませんか? それとも方法はありますか?
(大きなファイルをサービスにアップロードし、コールバックを使用して進行状況を報告しようとしています)