2017-01-30 1 views
0

を発信するWebアプリケーションと同じマシン上でクライアントをWebフォームへの返信:SignalR:私は次のプロセスをサポートするための方法を探しています要求

  1. ボタンは、マシンの名前PC1234上で動作するWebアプリケーションでクリックされました。
  2. 何かを行うためにサーバ(Webサーバまたは別のサーバ上のAPIのどちらでも構いません)に電話がかけられます。
  3. サーバーは、PC1234にインストールされているWindows Formsクライアントに、処理が完了したことを通知します。

私はSignalRを使用して簡単に作業することができます。 Webサーバー上でメソッドを呼び出し、メソッドが完了したことをすべてのクライアントに通知することができます。この問題は、元のマシン上のクライアントにのみ通知しています。

私の初期の計画では、マシンの特定の識別属性をサーバーへの呼び出しとともに含め、それを使用してSignalR通知をそのマシンだけに戻すことができましたが、それは可能ではないようです。

サーバーへの呼び出しに一意の参照が含まれていて、その参照でローカルにファイル(Cookie)を更新してから、クライエントが新しい参照用にCookieをポーリングし、すべてのSignalRメッセージそのユニークな参照のために受け取った。これはうまくいきましたが、実際にはそうではありませんが、これはクロスブラウザーで動作させ、さまざまなブラウザーが異なる場所にクッキーを保存したいからです。

最終的には、Webアプリケーションからローカルでサイレントに印刷することをサポートします。ユーザは、ウェブアプリケーション内の文書を選択し、印刷ボタンを押す。要求はサーバに送信され、サーバから文書をデータベースから取り出し、ネットワーク共有に保存し、マシン上のクライアントアプリケーションに通知を送る。印刷要求が生成されました。クライアントアプリケーションは、ネットワーク共有からドキュメントを印刷し、削除します。

答えて

0

私は私の質問で説明したものを正確に行う方法を見つけたことはありませんでしたが、十分にうまくいった選択肢を考え出しました。

私のWebアプリケーションとWindows Formsクライアントの両方で、ユーザーは同じWindows資格情報でログインしていました。私は、より詳細な例と手順についてthis articleを参照してください

Clients.User(userId).send(message) 

を使用して、したがって、同一のユーザがログインしたすべてのSignalRクライアントへSignalRメッセージをブロードキャストすることで、Webアプリケーション内のボタンクリックにサーバーの応答を持つことができました。

私のWindows Formsクライアントには、複数のクライアントインスタンスが存在していた場合に、サーバーからのSignalRメッセージの受信を処理するために、同じユーザー資格情報とコードでSignalR Hubに接続されたクライアントのインスタンス数を追跡するコードが含まれていました同じユーザーの詳細で接続されています(私の場合、「Webアプリケーションからの印刷を要求しましたが、複数のワークステーションにログインしました。ここに文書を印刷しますか? )。

関連する問題