問題タブ [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.
c# - ユーザーごとに個別のハンドラーを作成する - WCF チャット
この素晴らしい記事に従って、 WCF を使用したチャットを分析して理解しています。ロジックは、ユーザーがチャットに参加すると、その特定のユーザー用にイベント ハンドラーが作成され、辞書に格納されるというものです。
そのため、サービス内の複数のユーザーに対して複数のハンドラーが格納されます。
私の質問はこれです -
イベント ハンドラーの助けを借りてメッセージが送信されたときに、サービスはどのようにターゲット ユーザーを識別しますか? ユーザー用に保存されているイベント ハンドラーの一意性がわかりません。どうやって
その特定のユーザー向けに二重クライアント コントラクト インターフェイスを実装したクライアント側の関数を呼び出しますか? それらを接続するのはどれですか?セッション?
注: この記事を読まずに理解するのは難しいかもしれません。一般的な方法で質問するように最善を尽くしました。
よろしく
NLV
wcf - すべての Silverlight ポーリングでサーバー上で実行するカスタム コード。(ポーリングデュプレックス)
Silverlight クライアントが毎回サーバーにポーリングして接続を維持するときに、カスタム コードを実行することは可能ですか。私のアプリケーションは、silverlight3 から入手できるコメット スタイルのポーリング二重通信の実装です。すべてのポーリングで次の SOAP メッセージを送信することがわかりました。
wcf - 複数のクライアントに接続されたWCFサービスをデバッグする方法-.NET
クライアントを非同期的にコールバックする二重コントラクトを使用してWCFサービスを作成しました。複数のクライアントが接続されるといくつかの問題が発生し、サービスをデバッグする方法がわかりません。これに関する洞察はありますか?
ありがとうございました。
NLV
c# - 非同期 WCF 二重呼び出しからの asp.net ページの更新 - オブジェクト スコープ - ASP.NET
次の疑問があります。ページ「MyPage」があり、ページ クラスでいくつかの辞書オブジェクトを宣言しました。
私の疑問は
- 辞書をプライベートな非静的オブジェクトとして宣言すると、そのページ クラスの関数全体で使用できなくなります (オブジェクトは null になります)。
- しかし、辞書を静的であると宣言すると、関数全体でオブジェクトを横断できます。しかし、そのオブジェクトは、現在ページを開いたすべてのユーザーで同じでしょうか (各ユーザーはページのインスタンスを持ち、ページ クラスのインスタンスを持ち、クラスの静的変数はすべてのインスタンスで不変であると推測します)。クラスの)
私の理解は正しいですか?ページ クラス内のすべての関数で使用可能であり、ページの各インスタンス (ユーザー) に対して一意であるようにオブジェクトを宣言する方法。
アップデート1
Okie、ページ クラスのディクショナリ オブジェクトの初期化が別のスレッド (WCF Duplex コールバック) で行われていることがわかりました。しかし、メイン ページ スレッドでは、ディクショナリ オブジェクトはまだ null (初期化されていない) のままです。何か案は?
Update2
マーシャリング - ひょっとして役に立つ?
Update3
ジョンへの返信で-
お返事をありがとうございます。私が今直面している問題は、クライアント側の WCF コールバック クラス (別のスレッドで呼び出される) から asp.net ページにデータを渡すことです。では、どうすればそれを行うことができますか? ビュー ステートは、リクエスト間でデータを保持するのに役立つ場合があります。しかし、変更を通知するサーバーによってコールバックが呼び出された場合、どのように変更 (データ) を UI スレッド (asp.net ページ) に渡す必要がありますか?
c# - 「OperationContext.Current.GetCallbackChannel」は実際に何をしますか?
OperationContext.Current.GetCallbackChannel は実際に何をしますか? 個々のクライアントをどのように識別しますか?
WCF サービスで問題に直面しています。2 人以上のユーザーがサービスに接続した場合、サービスからクライアントに送信しているすべての「興味深い変更」は、2 番目に参加したユーザーに送信されます。
たとえば、A、B、C、D がサービスに参加した場合、コールバックを介して C と D に変更を送信すると、B に送信されます。
何か案は?
詳細:
クライアント: ASP.NET Web アプリ
バインディング: netTCPBinding
アップデート1
OKIE、問題の原因を発見しました。IIS で asp.net クライアントをホストしました。たとえば、クライアントの URL はhttp://url1です。ページの複数のインスタンスを別のマシンで開いてサービスに参加すると、コールバック チャネルは常にページの最初のインスタンスを指しています (別のマシンからサイトを開きます)。しかし、IIS の異なるサイトで asp.net クライアントをホストすると、コールバック チャネルは一意になります。それについて何か考えはありますか?
wcf - WCF Duplex タイムアウトを処理するには?
この 2 日間、Web を検索してきましたが、WCF Duplex サービスを機能させることができません。skydrive からダウンロードできるデモ プロジェクトを作成しました。
考えられるエラーの原因の数を最小限に抑えるために、コールバック ハンドラーで短い文字列を返すことにしました。これは、最大メッセージ サイズの制限などを超えていないためです。通常、私の WCF サービスでは、結果を計算してからクライアントに返すまでに、ある程度の時間 (+15 分) が必要です。これをシミュレートするために、実行中のスレッドを DoWork() で 12 分間 slep にしました。
receiveTimeout私が受け取る例外は、問題を防ぐために増加する必要がある、の可能性のある問題について常に言及しています。ただし、receiveTimeout(および私が知っている他のタイムアウト) は 3 時間に設定されています。
もう 1 つ: 私は .NET Framework 3.5 SP1 を使用していますが、netTcpBinding の代わりに WsDUalHttpBinding を使用すると問題が発生します。
wcf - Duplex WCF サービス - 直接呼び出しとコールバックが同じチャネルを使用しない
私の目標は、受信ポートを開かずに、ファイアウォールの背後にある WCF サービスに到達することです。私が選択した解決策は、パブリック側で二重 WCF サービスをホストすることです。これは、ファイアウォールが関与していない場合に使用されたものと同じコントラクトをコールバックとして持ちます。
netTcpBinding を使用した場合は機能しましたが、ストリーミング通信が必要なため、カスタム バインディングを使用する必要がありました。
ファイアウォールを立ち上げるまで、すべてが正常に機能します。その時点で、(ファイアウォールの背後からの) 直接呼び出しは正常に機能しますが、コールバックは機能しません (ファイアウォールが停止します)。
質問はなぜですか?定義済みの netTcpBinding と同じチャネルを使用するべきではありませんか?
app.config のチャネル スタックは次のとおりです。
wcf - WCF デュプレックス コールバック サンプルの失敗
内部シナリオの参照として使用されるいくつかのサンプル サービスを洗練するために、この WCF 二重チャネルの例を作成し、長年にわたって見つかったいくつかの例をまとめました。
デュプレックス部分が機能していません。みんなで一緒に解決できることを願っています。私はこれほど多くのコードを投稿するのは嫌いですが、コミュニティによって精査されることを望んでいるすべての部分を組み込みながら、WCF ができる限り短くしたと感じています。ここには本当に悪いアイデアがあるかもしれませんが、それが正しいと言っているわけではありません。
3 つの部分があります。チャネル、サーバー、およびクライアント。3 つのプロジェクトと、ここでは 3 つのコード ファイル。XML 構成はなく、すべてがコード化されています。その後にコード出力が続きます。
Channel.proj / Channel.cs
Server.proj / Server.cs、Channel、System.Runtime.Serialization、System.ServiceModel を参照
Client.proj / Client.cs、Channel、System.Runtime.Serialization、System.ServiceModel を参照
照合出力:
Andrew が指摘したように、問題はそれほど自明ではありません。この「照合された出力」は、目的の出力ではありません。代わりに、サーバーを実行し、Ping と登録を成功させ、5 秒ごとにサーバーが「HELLO? (#m)「同期的に」そしてすぐにクライアントが変換して戻り、サーバーがそれを受信して出力します。
代わりに、ping は機能しますが、最初の試行で Callback が失敗し、再接続時にクライアントに到達しますが、サーバーには戻らず、すべてが切断されます。
私が目にする唯一の例外は、以前に障害が発生したために使用できないチャネルに関連していますが、チャネルがその状態に達する原因となる実際の障害についてはまだ何もありません。
私は[OperationalBehavior(IsOneWay= true)]何度も同様のコードを使用しました。この一見より一般的なケースが私にそのような悲しみを与えているのは奇妙です.
私が理解していないサーバー側でキャッチされた例外は次のとおり
です。タイムアウト (00:00:00)。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。これは、サービスがまだ操作を処理中であるか、サービスが応答メッセージを送信できなかったことが原因である可能性があります。考慮してください。操作のタイムアウトを増やし (チャネル/プロキシを IContextChannel にキャストし、OperationTimeout プロパティを設定することにより)、サービスがクライアントに接続できるようにします。」
wcf - WCF Duplex "TwoWay" サブスクライブ + コールバックの例を探す
これを機能させる方法、または機能しない理由についての決定的な答えを本当に知る必要があるため、賞金を再び更新します。
双方向 (IsOneWay = false) の WCF クライアント サーバーを .Net 3/3.5 で動作させるのに非常に苦労しました。
クライアントがサービスに正常に登録された後、サービスの定期的な Announcement() が、登録されたクライアントにコールバックします。2 秒に調整されたサーバーの SendTimeout が経過するまで、クライアントまたはサーバーのいずれかがハングするようになりました。次に、サーバー側には次のようにタイムアウト例外があります。その場合にのみ、クライアント ユーザー コードは直ちにメソッド呼び出しを受け取り、値を返そうとします。それまでに、クライアントのソケットは中止され、WCF は失敗します。
クライアント上の何かが、ソケットがタイムアウトするまで処理からローカル WCF キューをぶら下げているようですが、ローカル メソッド呼び出しをキャンセルするのに十分早くはありません。しかし、以下の例外が信じられる場合、サーバーはhttp://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymousに操作を送信しようとしており(不適切です!)、タイムアウトしています。おそらく、その URI はリモート接続されたクライアントの "名前" に過ぎず、WCF はエラー メッセージの目的でそれを参照することを認識しており、URI の読み込みに失敗していることを意味しているように見えます。サーバーが最初に失敗したのか、クライアントが最初に失敗したのかわかりません。
WCF トレースを追加しようとしましたが、それ以上の情報が得られません。
同様のサンプル コードはこちらにありますが、多すぎて消化しきれませんでした。私はそのコードのバリエーションを試しました。
.net - WCF サービス インターフェイス交換
WCF で二重化シャネルを回避し、クライアントでコールバック サービスを作成し、クライアント アドレスをサーバーに渡して、サーバーがいつでもクライアントを呼び出せるようにしたいと考えています。(バインディング等が違うのかもしれません)
コールバック インターフェイスをクライアントに渡すにはどうすればよいですか? (私はまだサーバーがこのインターフェースを管理し、それを別のDLLに入れないようにしたい.何かアイデアはありますか?ありがとう