2012-04-04 17 views
2

私はhttps://github.com/SignalR/SignalR/wiki/Hubs 「ハブの外からのハブを介したブロードキャスト」と題した指示に従ってきました。SignalR - WCFプロジェクトからのメッセージの送信

私は、このメソッドが同じプロジェクトのMVCアクション内で動作しています。アクションを要求すると、接続されたクライアントにアップデートが送信されます。

私の問題は、別のプロジェクト、特にWCF Webサービスプロジェクトから更新を送信できる必要があることです。私のアプリケーションにはAPIとWebコンポーネントがあり、APIユーザーが変更を加える呼び出しを行うと、これらの更新をSignalRを介してWebクライアントにプッシュする必要があります。私のテストアクションと同じコードでWebサービスを呼び出すことはできません。

また、同じコードをnunit unit testの中で試してみましたが、どちらもうまくいきませんでした。

この同じ方法をWCFプロジェクトのWiki作業で説明するには、何が必要ですか?

+0

"プロジェクト"は実行されません。あなたの質問は、アプリケーション、NTサービス、またはWebアプリケーションの観点から言えばよいでしょう。 –

+0

申し訳ありませんが、私はあなたが何を意味するか分からない! – reach4thelasers

+0

Visual Studioの "Project"(NTサービス、コンソールアプリケーション、Webアプリケーション、ユニットテストホストなど)は実行できません。「別の*プロジェクトから更新を送信する」と言ったら、どういう意味ですか?同じプロセスで実行されているアセンブリにコンパイルされたプロジェクト?または別の実行可能ファイルですか? –

答えて

6

最も簡単な解決策は、接続されているすべてのクライアントにブロードキャストするWebアプリケーション(MVCまたは新しいWebAPIを使用)にAPIを提供することです。他のアプリケーション(NTサービス、NUnitテストなど)は、クライアントにメッセージを送信したい場合、そのAPIを呼び出すことができます。

IISで実行されているWebアプリケーションでHubをホストしていない場合や、直接Hubをホストしている別のアプリケーションでHubをホストしていない場合、SignalRは何もすることはできません。

別々のアプリケーションからクライアントへの双方向通信が必要な場合は、アプリケーションをSignalRクライアントにして、WebアプリケーションホストのSignalRを介してクライアントに通信し、クライアントからのメッセージも聴取させます。例えば、ここでは(今の紫を無視する)私は、複雑なサービス+ウェブサイト+クライアントソリューションを構成しているか

です:

SignalR Complex Architecture

ライブWebサーバーがNTサービスはSignalRグループを接続して作成することができます。 NTサービスはそれらのグループに送信します。 Webブラウザはグループに接続し、そのグループにメッセージを送信します。実際には、中央のボックスはpubsubhubになります。

2

あなたが目指すものを正確に得ることはできません。しかし、私が正しく理解すれば、WCFサービス内で発生した何らかの通知をSignalRクライアントに送信しようとしています。 これが当てはまる場合。

私は、同じアプリケーションサーバーにいくつかのWCFサービスとSignalRハブを用意しています。 IMHO、WCFとSignalRハブを通信する最善の方法は、MSMQを使用することです。 WCFサービス内で通知が発生すると、通知ペイロードがMSMQに格納されます。 一方、SignalRハブは同じキューをリスンします。キューに入れられたメッセージは、コンテンツを取得し、ハブクライアントにブロードキャストします。非常に簡単で簡単です。サーバー側で追加のサービス/ハブコールはありません。

SignalRハブは、System.Messaging.MessageQueue#ReceiveCompletedメソッドを使用して新しいキュー項目をリッスンできます。このイベントが発生すると、SignalRハブはキュー項目を取得し、そのクライアントにブロードキャストします。