2012-04-04 75 views
2

我遵循https://github.com/SignalR/SignalR/wiki/Hubs 的指示,題目爲「從Hub外部通過Hub進行廣播」。SignalR - 從WCF項目發送消息

我從同一個項目中的MVC Action中獲得了此方法。請求操作將更新發送給連接的客戶端。

我的問題是我需要能夠從另一個項目,特別是WCF Web服務項目發送更新。我的應用程序有一個API和一個Web組件,當API用戶發出改變事件的調用時,需要通過SignalR將這些更新推送到Web客戶端。使用與我的測試操作相同的代碼調用Web服務不起作用。

我也試過在nunit單元測試中沒有工作的代碼。

我需要做什麼才能使這個在WCF項目的Wiki工作中描述的方法相同?

+0

「項目」不會執行:您的問題最好從應用程序,NT服務或Web應用程序方面說明。 – 2012-04-04 16:27:27

+0

對不起,我不確定你的意思! – reach4thelasers 2012-04-04 16:41:24

+0

你不能執行一個Visual Studio「項目」 - NT服務,控制檯應用程序,Web應用程序,單元測試主機......都是執行的東西。當你說「從另一個*項目*發送更新」你是什麼意思?一個項目被編譯成一個在同一個進程中執行的程序集?或單獨的可執行文件? – 2012-04-04 17:54:56

回答

6

最簡單的解決方案可能是在您的Web應用程序(使用MVC或新的WebAPI)上提供一個廣播給所有連接客戶端的API。任何其他應用程序(NT服務,NUnit測試...)都可以調用該API,以便將消息發送給客戶端。

如果您不是在IIS下運行的Web應用程序或直接託管它的其他應用程序中託管集線器,則無法期望SignalR執行任何操作。

如果您需要從您的單獨應用程序到您的客戶端的雙向通信,那麼也可以簡單地將您的應用程序變成SignalR客戶端,並通過Web應用程序託管的SignalR與客戶端進行通信,並讓它監聽來自它們的消息。

例如,這裏就是我已經配置了一個複雜的服務+網頁+客戶端解決方案(忽略紫色現在):

SignalR Complex Architecture

實際網絡服務器允許NT服務連接,創造SignalR組。 NT服務發送給這些組。 Web瀏覽器連接到一個組並接收發送到該組的消息。實際上,中間框變成了pubsubhub。

2

我不明白你的目標。但是,如果我理解正確,您正試圖將WCF服務內部引發的某些通知發送給SignalR客戶端。 如果是這樣的話;我可以建議你我的方法:

我在同一個應用程序服務器中有一些WCF服務和一個SignalR集線器。恕我直言,溝通WCF與SignalR樞紐的最佳方式是使用MSMQ。 當通知發生在WCF服務中時,它將通知有效載荷放入MSMQ中。另一方面,SignalR中心偵聽同一個隊列。當一條消息放入隊列中時,它將獲取內容並向中心客戶端廣播。非常簡單直接。服務器端不需要額外的服務/集線器。

SignalR集線器可以通過使用System.Messaging.MessageQueue#ReceiveCompleted方法來偵聽新的隊列項目。當此事件發生時,SignalR集線器獲取隊列項目並向其客戶端廣播。