問題タブ [duplex-channel]

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.

0 投票する
2 に答える
1621 参照

.net - WCF - クライアントが接続されたときに閉じられた場合、CloseTimeout 期間のデュプレックス ServiceHost ブロックを閉じる

3 つの異なる二重 WCF チャネルをホストする Windows サービスがあります。クライアントは、コールバック コントラクトを介して更新を送信するために接続できます。基本的に 3 つの pub-sub チャネルがあります。

このサービスは、クライアントが接続されている場合、バウンスに時間がかかります。への呼び出しが返されるServiceHost.Closeまでに 10 秒かかります (したがって、サービスが停止するまでに 30 秒以上かかります)。my closeTimeoutin config は 10 秒であることがわかります。この値を変更すると、これが問題の原因であることを示します。

すぐにチャネルを閉じるにはどうすればよいですか? 何かがタイムアウトしているという考えは好きではありません。を呼び出すこともできますAbortが、もっと良い方法があるはずです。これまで非二重チャネルでこれを見たことがないので、二重であることと関係があると思います。

理想的には、チャネルに障害が発生したことをクライアントにすぐに通知して、ユーザーが更新が停止したことをすぐに確認できるようにすることです。

0 投票する
3 に答える
11855 参照

wcf - WCF デュプレックス チャネル: コールバック チャネルがまだ使用可能かどうかを確認します

次の問題があります。チャットソフトを書いています。クライアント/サーバー メカニズムは、WCF の DualHttpBinding に基づいています。これは、ユーザーがメッセージを送信すると、メッセージが送信されたルームにいるすべてのクライアントがサーバーによって通知されることを意味します。

クライアントのアプリケーションがクラッシュした場合 (何らかの理由で)、クライアント オブジェクトがルームのリストから削除されるようにしたいと考えています。

コールバック操作を呼び出す前に、コールバック チャネルの状態を確認する可能性はありますか? 問題は、(予期しないクラッシュのため) 接続されていないクライアントで操作を呼び出すと、サービスがハングすることです。

クライアントがまだリッスンしているかどうかを確認するにはどうすればよいですか? ところで、クライアントで呼び出される操作はすべて OneWay と宣言され、ConcurrencyMode は "Multiple" に設定されます。

皆さん、ありがとうございました!

はじめまして、

サイモン

0 投票する
1 に答える
73 参照

.net - WCF サービス インターフェイス交換

WCF で二重化シャネルを回避し、クライアントでコールバック サービスを作成し、クライアント アドレスをサーバーに渡して、サーバーがいつでもクライアントを呼び出せるようにしたいと考えています。(バインディング等が違うのかもしれません)

コールバック インターフェイスをクライアントに渡すにはどうすればよいですか? (私はまだサーバーがこのインターフェースを管理し、それを別のDLLに入れないようにしたい.何かアイデアはありますか?ありがとう

0 投票する
4 に答える
7940 参照

wcf - WCF:障害のあるチャネルを診断する方法は?

私は、私たちが目にしているいくつかの奇妙なチャネル障害の異常を診断するのに役立つことを願って、ラボの変更を出荷することに取り組んでいます. DuplexChannelFactory を使用していくつかの Windows サービスに接続するテスト アプリケーションがあり、何らかの理由でこのテスト アプリケーションのチャネルにかなりの障害が発生しているようです。そこにいくつかの再試行ロジックを実装する計画がありますが、なぜそれらが失敗しているのかを正確に理解することは素晴らしいことです.

チャネル ファクトリとプロキシ オブジェクトはすべて多くのインターフェイスを実装していることを知っており、リフレクターを使用してそれらのいくつかをクロールしましたが、探しているようなものは見つかりませんでした。障害の原因に関する情報を取得するために、障害が発生した後にこれらのオブジェクトにクエリを実行する方法はありますか?

編集: 構成は非常に基本的なものです。バインディングはデフォルトで構築された NetTcpBinding のみであり、サービスの実装には が[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]あり、サービス コントラクトの操作には特別な属性はありません。ただし、この特定のケースを診断するのではなく、チャネル障害を診断する一般的な手法について詳しく質問しています。構成の詳細がそれに大きな影響を与えるとは思いません。どちらかといえば、構成の詳細は、上記の診断によって返されるものですよね?

0 投票する
2 に答える
3312 参照

wpf - wsDualHttpBinding が WPF クライアントでネットワーク外で機能しない

私は WPF と WCF の間に DuplexCommunication を実装しようとしていましたが、ネットワーク内で内部的にテストすると通信がうまく機能し、外部に公開した後にこの外部ネットワークにアクセスしようとすると、Web ブラウザーを介してサービスにアクセスできます。しかし、接続を開こうとすると、WPF クライアントがエラーを出しています。以下は、サーバー側とクライアント側の両方の構成です。サーバ:

クライアント:

サーバー側でdns値を使用して「baseAddresses」と「identity」を指定しようとしましたが、クライアント側でもclientBaseAddressを指定しようとしましたが、それでもネットワーク外では機能しません。

WPF アプリケーションから二重接続を開こうとすると、常にタイムアウト エラーが発生する: エラー: 「00:00:09.4911018 の割り当てられたタイムアウト内で、開く操作が完了しませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。 ."

構成部分に何か問題があると思いますが、それが何であるかはわかりません。これに関するヘルプは大歓迎です。

ありがとう。

0 投票する
2 に答える
645 参照

c# - サービスをホストするオブジェクトにアクセスします

C#でWCF4を使用しています。Singleに設定されたInstanceContextModeを使用しています。コントラクトを実装するクラスのインスタンスは、サービスをホストするオブジェクトの参照を受け入れるコンストラクターを使用して作成されます。サービスオブジェクトは、サービスホストが作成およびホストされているときに渡されます。

サービス実装コード:

ServiceHosterコード:

私が今直面している問題は、クライアントとサーバー間の二重通信が必要なことです。二重接続の場合、InstanceContextModePerSessionに設定する必要があります。

私の質問は次のとおりです。

  1. InstanceContextModeに複数の値を何らかの方法で使用できますか(これは不可能だと思います)?

  2. ServiceImplオブジェクトがそれをホストしているオブジェクトの参照を取得する他の方法はありますか?

  3. 問題を解決するために私が別の方法でできることはありますか?

ありがとう。

0 投票する
1 に答える
834 参照

wcf - httpsとストリーミング?http経由のIDuplexSessionChannel - クライアントポートはデフォルトで開いていますか?

WCF の専門家にとっては簡単に答えられると思う小さな質問がいくつかありますが、正確にはわかりません。私は彼らが明白ではないことを願っています:

  1. トランスポート セキュリティ (http と ssl) はストリーミングと連携して機能しますか? いいえの場合、大量のデータを安全な方法でクライアントに転送するにはどうすればよいですか?
  2. 私が完全に軌道から外れていない場合、サービスがコールバック経由でクライアントに接続できるように、IDuplexSessionChannel ではクライアントもポートを開く必要があります。これは、http 経由で通信する IDuplexSessionChannel にも影響しますか? ポート 80 はデフォルトで開いているはずですよね?
0 投票する
1 に答える
231 参照

wcf - WCF カスタム チャネルの DuplexSessionChannel (tcpTransport) でメッセージを変更するにはどうすればよいですか?

tcpTransport を使用するため、カスタム チャネルに IDuplexSessionChannel を実装します。そのカスタム チャネルでは、サービス呼び出しの応答をキャッシュします (クライアント側のキャッシュ)。しかし、それにはエラーがあります。IRequestChannel では正常に動作します。TryMessage メソッドでメッセージを変更するにはどうすればよいですか。私のコード:

CacheManager が動作します。そして、応答キャッシュを取得します。しかし、tryReceive を再度実行し、Message を見ると。メッセージは閉じています。どうすれば修正できますか

0 投票する
1 に答える
446 参照

wcf - WCFをコールバック方向に拡張するにはどうすればよいですか?

ClientRuntimeの各操作、およびサービス側のDispatchRuntimeの各操作に、ビヘイビアーを使用してIParameterInspectorをアタッチできます。しかし、これはクライアントからサービスまでしか機能しないようです。

また、上記のように、ワイヤーの両側でサービスからクライアントへのコールバックにIParameterInspectorをアタッチできるようにしたいのですが、これを行うための拡張ポイントが見つかりません。

何か案は?

0 投票する
1 に答える
718 参照

c# - DMZ からイントラネットへの二重チャネル WCF

ドメイン内でデュアル チャネル サービスを実行しています。ポート 20120 に TCP バインディングがあり、ポート 20121 に HTTP バインディングがあります。

DMZ (Web) では、この WCF サービスにアクセスしたいと考えています。ファイアウォールは Web からサービスに対して開いているようです。telnet を使用すると、両方のポートにアクセスでき、Web のブラウザーから WSDL を参照することもできます。現在、Web アプリケーションからサービスに接続しようとすると (TcpBinding を使用しており、面倒なプロセスである新しいバイナリを再デプロイしないと簡単に HttpBinding に変更できません)、例外が発生します。

私たちのテスト環境はすべてイントラネットだったので、DMZ はありませんでした。そこではすべて正常に動作します。

サービス自体はドメイン ユーザーとして実行されており、クライアント サービスの動作には userPrincipal が構成されています (username@domain.ext など)。domain.exe のドメイン コントローラにアクセスする必要がありますか?

サービス側で WCF ログも有効にしましたが、そこでは何も起こりません。そこでは何も起こらなかったように、すべてが静かです。接続が切断された理由を確認するために見逃した他の場所はありますか。

EDIT1: wcf 接続を確立し、2 つのメソッドを呼び出す小さなテスト プログラムを作成しました。これは、サービスと同じマシンから、および dmz Web からも正常に機能します。バインド設定は同じです。(それを確認した)。dmz Web マシンの通常のコンソールからローカル ユーザーとしてテストを実行します。ヒントはありますか?