我有一個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應用程序不顯示消息。
你能解釋它是如何「不工作」的更詳細的?調用$ .connection.hub.start()或chat.server.send($('#msg')。val())會失敗嗎?來自客戶端的任何請求是否收到非200響應狀態? – halter73
你不能只添加一個引用到其中有集線器的dll,並期望它可以工作。 SignalR客戶端連接到運行SignalR的服務器。您無法從該服務器之外進行廣播。 – davidfowl