問題タブ [wcf-callbacks]
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.
asp.net - IIS でホストされている ASP.NET Web アプリから WCF コールバック サービスを受け取る
私はこの問題に数日間取り組んできました。
問題には 3 つの作業部分があります。ASP.NET サイト、WCF IIS ホステッド サービス、および WPF xbap アプリがあります。
私がやろうとしているのは、変数を ASP.NET サイトから WPF xbap アプリに渡すことです。そのため、wsDualHttpBinding を使用して WCF サービスをセットアップし、コールバックを使用して ASP.NET と xbap に通知しました。
サーバーのIIS 6でWCFサービスをホストし、VS2012でASP.NETホスティングを実行すると、ローカルでiisexpressとxbapがローカルで実行されます。それは正常に動作します。しかし、ASP.NET サイトをサーバー上の IIS 6 に発行するとすぐに、ASP.NET アプリはコールバックを受け取りません。どちらもアプリケーション プールにあります。
ASP.NET がコールバックのリッスン ポートを開いたままにするために必要な設定、または探しているものはありますか? XBAP はまだコールバックを受信していますが、問題ありません。
サービス構成は次のとおりです。
サービスには、クライアントがコールバック リストをサブスクライブするメソッドがあります。次に、メソッドはリストをインクリメントして呼び出しコールバックを送信します。
以下は WCF サービス ヘッダーです。メソッドの挿入はスキップしました。
ASP.NET クライアントの web.config について
次に、XBAP アプリ クライアント app.config
両方のクライアントで、Add Service Reference メソッドを使用して、WCF を ASP.NET プロジェクトと XBAP プロジェクトの両方に追加しました。私は両方のクライアントにコードを持たせ、もちろん各コールバックのメソッドを処理するようにセットアップしました。
少し長くなってしまったように見えますが、この問題についてできる限り多くのことを示したかったのです。IIS 6でホストされている場合はローカルでは正常に機能するのに、なぜ機能しないのか、私は完全に迷っています。
wcf-callbacks - WCF:非同期メソッドを使用してコールバック (同じクライアント) でサービス メソッドを呼び出す
セッション、コールバック、および TPL を使用してどこまで実行できるかを理解するために、いくつかの WCF 実験を行っています。これらの実験の 1 つに奇妙な結果があります... サービスは双方向バインディング (NetTcpBinding) で実装され、通知はコールバックとして実装されます。予想される動作は次のとおりです。
- クライアントは同期方法でサービス (Do) のメソッドを呼び出します
- サービスは同期方法でクライアントのコールバックを呼び出します
- クライアント (コールバック内) は、非同期の方法でサービスのメソッドを 2 番目に呼び出します。
サービスにはセッションが必要です。InstanceContext は PerSession で、同時実行モードは Single です。この状況では、コールバックのコンテキストでは、(同じクライアント上の) サービスのメソッドを同期的に呼び出すことはできないため、コードは次のようになります。
クライアントでのコールバック インターフェイスの実装:
すべてのコードを実行するメイン メソッド:
私の考えでは、Notify メソッドの実装内の行は次のとおりです。
デッドロックを解除する必要がありますが...いいえ、ReDoAsyncが呼び出されると、「現在のメッセージの処理が完了するまで応答を受信できないため、この操作はデッドロックになる...」という例外がスローされます。はい、知っています。実際、問題を回避するためにサービスを非同期でコールバックしようと考えましたが、機能していません。
しかし、私を夢中にさせるのは、コードを少し変更するだけで魔法のように機能するという事実です。私が試した ReDoAsync 呼び出しの代わりに:
そしてそれは機能します!問題は、クライアント メソッドの非同期バージョンは、機能するものと同一または類似の呼び出しを行うことになっているのではないかということです。そうでない場合、クライアント メソッドの非同期バージョンは実際に何をするのでしょうか?
ありがとう。
wcf - 負荷分散サーバーでの WCF コールバック
WCF コールバック コントラクトを使用して開発されたチャット アプリケーションがあります。これは、クライアント サーバー通信に netTcp バインディングを使用します。
クライアントは、クライアント マシン (XP または Windows8 マシン) で実行される Windows フォーム アプリケーションです。
この WCF サービスは、サーバー マシンで Windows サービスとしてホストされています。サービスでクライアント セッション リストを維持しています。これは、サーバーに接続されている各クライアントの詳細を格納します。このリストは静的変数です。
ワークフローは、クライアントが接続操作を使用してサーバーに接続するたびに、クライアントの詳細がクライアント セッション リストに追加され、サーバーはこのセッション リストを使用して、必要に応じてクライアントにメッセージを返信します。
単一サーバー環境ではすべてが正常に機能します。負荷分散シナリオでこれを処理する方法を知りたいと思います。つまり、2 台のサーバー マシンがあり、一度に 1 台のサーバーがアクティブになります。サーバー 1 に障害が発生した場合、サーバー 2アクティブになります。このシナリオでは、2 つのサーバー間でクライアント セッション共有を管理し、クライアントに影響を与えずに通常どおり動作させるにはどうすればよいでしょうか?
wcf - WCF コールバックと非 WCF クライアント
.NET で実装されていないクライアントで WCF コールバックを使用できるかどうか疑問に思います。グーグルはそれについて私に答えることができませんでした。
ありがとう
wcf - WCF アーキテクチャにより、コールバックを操作し、AD に対して認証することができます
長いタイトルでごめんなさい。
これは、WCF の構成とセキュリティに関するものです。次のシナリオがあります。
- 1 つのサーバー (IIS)
- N クライアント (WPF アプリケーション)
- クライアントとサーバー間で通信するための Web サービス
- すべてが同じLANと同じドメインにあります
- サーバーがすべてのクライアントに通知できるように、二重通信が必要です (ポーリングはありませんが、WCF コールバックを使用します)。
- ユーザーの資格情報 (ログイン/パスワード) は Active Directory によって管理されます
- ユーザー認証は「ユーザーごと」であり、「Windows アカウントごと」でも「マシンごと」でもありません
理想的には、2 つの異なるサービスが必要です。
コールバックを使用できるように WCF セッションを必要とするもの:
そうではないので、古き良き方法を使用して、ステートレスで効率的で保守可能なサービスを記述できます。各 WCF 呼び出しは認証および承認され、サーバー側で Service 実装の新しい新しいインスタンスを生成します。
問題は、すべてのクライアントが Active Directory に対して認証されることです。そのため、クライアント アプリケーションの起動時に、すべてのクライアントがログイン、パスワード、およびドメインを指定する必要があります。問題は、AD 認証に非常に時間がかかることです。
私の最初のアイデアは、IService1
(コールバックの送信を担当する) サービスを認証サービスとして使用することでした。
したがって、Login
操作の実装内で、ユーザーのログイン/パスワードを AD に対して 1 回だけチェックし、クライアントからの次の WCF 要求については WCF セッションに依存することができます。IService1
問題は、セッションモードが であるため、サービスRequired
に対して他のリクエストを行いたくないInstanceContextMode
ことですPerSession
(はい、ログイン/ログアウト/クライアント通知以外の操作では避けたい醜いクライアントプロキシシングルトンパターン) .
問題は、どうすれば自分のサービスを構築して構成できるかということです。
- WCF リクエストごとに AD に対してリクエストする必要はありません
- サーバーコールバックがあります
IService2
コールバック サービス (「実際の」サービスではない) には、セッションごとにシングルトン パターン/セッションが必要/インスタンス コンテキストしかありません。
wsHttpBinding
forIService2
とnetTcpBinding
forを考えていましたIService1
。転送セキュリティ (トランスポートまたはメッセージ) の選択と資格情報の種類 (Windows、UserName、.. ?) の選択については、よくわかりません。
どんな助けでも大歓迎です。
c# - WCF RoutingService は、同じコントラクトを持つ 2 つの異なる WCF サーバーからクライアントにコールバック メッセージをルーティングする方法を教えてください。
私の WCF サーバーは次のように動作します。たとえば、Subscribe() などのサービス メソッドを呼び出して、サーバーにサブスクライブします。MessageReceived(string message) などのコールバック チャネルで結果を返します。
現在の問題は、両方ではなく、1 つのサービス エンドポイントからのみコールバック メッセージを取得していることです。実際、デバッグするだけで、私の 2 番目のサービスがリクエストを受け取っていないことがわかります。誰が問題が何であるか知っていますか?これが私のコードです(serviceAddresses文字列に2つのnet.tcpアドレスがあることに注意してください):
だからもう一度...これが私が欲しいものです:
これは私が得ているものです(ルーターに2番目のサービスを追加しましたが、サービスメソッドを呼び出すことすらないようです):
c# - wcf コールバック メソッドが実行されない
1.私のサービスはコンソール アプリケーション上にあり、私のクライアントは Windows アプリケーション上にあります。
2.サービスにはコントラクトがあり、クライアントにはコールバック コントラクトがあります。
この問題は、クライアントがサービスのメソッドをアクティブ化し、そのメソッドがクライアントのコールバックをアクティブ化したが、そのメソッドが実行されない場合に発生します! 大きなショックは、クライアントがコンソール アプリケーションを使用しているときに、同じ状況でコールバック IS が実行されることです。
サービス契約インプレッション:
クライアントのコールバック コントラクト インプ:
同じコードがクライアント コンソール アプリケーションでは機能しますが、クライアント Windows アプリケーションでは機能しません。