2012-11-29 41 views
2

我有一個n層應用程序,它有一個WCF服務,公開所有我的業務邏輯,託管爲一個Windows服務,作爲客戶端使用MVC應用程序,並使用這些服務。N層WCF應用程序中的SignalR

這裏的大多數例子都顯示了MVC應用程序中的SignalR。我曾嘗試提取集線器到一個單獨的DLL是這樣的:

Hub.dll

public class Chat : Hub 
{ 

    public void Send(string message) 
    { 
     Clients.All.addMessage(message); 
    } 
} 

,並試圖調用從我的MVC CSHTML發送(),甚至加入Hub.dll作爲參考後,不起作用。

這是我CSHTML文件中的javascript:

<script type="text/javascript"> 
    $(function() { 
     // Proxy created on the fly   
     var chat = $.connection.chat; 

     // Declare a function on the chat hub so the server can invoke it   
     chat.client.addMessage = function(message) { 
      $('#messages').append('<li>' + message + '</li>'); 
     }; 

     // Start the connection 
     $.connection.hub.start().done(function() { 
      $("#broadcast").click(function() { 
       // Call the chat method on the server 
       chat.server.send($('#msg').val()); 
      }); 
     }); 
    }); 
</script> 

雖然上面的代碼是一個非常簡單的例子,我想完成將類似於那些SignalR進度條的教程有什麼例子,除了進度報告將由我的業務層完成。

爲了進一步闡述,我願做這樣的事情:

1)MVC客戶端通過託管WCF服務調用PerformLongRunningTaskA()。

2)WCF服務調用在業務層方法

3)業務層開始PerformLongRunningTaskA()

4)商務層報告進展回MVC客戶10%.. 20%...等,直到100 %(使用SignalR?)

這是我的項目結構如何大致是這樣: 演示 - MVC應用程序 服務層 - WCF服務(託管在Windows服務) 業務層 - 我所有的業務邏輯 數據層 - Entityframew ORK

編輯:

以上現在的作品。這是我的一些JavaScript錯誤。

我已經創造了另一個控制檯應用程序,以模擬我的生意DLL觸發關閉signalr廣播這樣的事件:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Say("HEY"); 
    } 
    public static void Say(string message) 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<Chat>(); 
     context.Clients.All.say(message); 
    } 
} 

我已經加入Hub.dll爲我的控制檯項目的引用,但上面現在不起作用。沒有錯誤信息,沒有。它只是運行正常,但我的MVC應用程序不顯示消息。

+0

你能解釋它是如何「不工作」的更詳細的?調用$ .connection.hub.start()或chat.server.send($('#msg')。val())會失敗嗎?來自客戶端的任何請求是否收到非200響應狀態? – halter73

+0

你不能只添加一個引用到其中有集線器的dll,並期望它可以工作。 SignalR客戶端連接到運行SignalR的服務器。您無法從該服務器之外進行廣播。 – davidfowl

回答

5

如果你假裝廣播消息,你需要在「服務上下文」中,我的意思是你必須有權訪問託管的Hub上下文。

如果您需要通過控制檯應用程序進行廣播,您可以在Hub中創建允許您這樣做的方法,並使您的控制檯應用程序成爲主SignalR服務器的客戶端。 詳細瞭解如何創建一個。淨控制檯SignalR客戶端:SignalR Client Hubs

如果您需要在控制檯應用程序中的「託管語境」,然後嘗試SelfHost SignalR SelfHost

乾杯,

+0

SignalR客戶端集線器上提供的鏈接不再有效。這是更新的:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client –