2

https://github.com/SignalR/SignalR/wiki/Hubs の「ハブ外からのハブ経由のブロードキャスト」というタイトルの指示に従いました。

このメソッドは、同じプロジェクトの MVC アクション内から機能します。アクションを要求すると、接続されているクライアントに更新が送信されます。

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

また、nunit単体テスト内で同じコードを試しましたが、どちらも機能しませんでした。

Wiki で説明されているこの同じメソッドを WCF プロジェクトで機能させるにはどうすればよいですか?

4

2 に答える 2

6

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

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

別のアプリケーションからクライアントへの双方向通信が必要な場合は、アプリケーションも SignalR クライアントにして、Web アプリケーションでホストされている SignalR を介してクライアントと通信し、クライアントからのメッセージもリッスンします。

たとえば、複雑な Service + WebSite + Clients ソリューションを構成した方法を次に示します (ここでは紫を無視してください)。

SignalR の複雑なアーキテクチャ

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

于 2012-04-04T16:25:57.703 に答える
2

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

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

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

于 2013-08-12T20:14:03.570 に答える