2011-09-29 111 views
2

我試圖在應用程序中使用SignalR集線器,但我目前沒有運氣。我已閱讀Scott Hanselman's article,並且還查看了this博客文章,其中顯示瞭如何在MVC中實現它,基本上執行相同的操作。不幸的是,我沒有運氣。在客戶端,JavaScript似乎很好[除了沒有任何事情發生],但是當我在代碼中放置斷點時,它顯示控制器正在被調用,而不是中心代碼。我正在使用的代碼是這樣的:使用SignalR與ASP.NET MVC3

// Client side javascript: 
var hooking; 
$(function() { 
    // Setup SignalR 
    hooking = $.connection.hooking; 
    hooking.removeLead = function(ref) { 
     $("lead" + ref).remove(); 
    }; 
    $.connection.hub.start(); 
    } 
}); 

// Hooking.cs (placed in application root) 
public class Hooking : Hub 
{ 
    public void Submit(string jsonString) 
    { 
     var serializer = new JavaScriptSerializer(); 
     var json = serializer.Deserialize<HookingLeadResult>(jsonString); 
     Clients.removeLead(json.Ref); // Remove lead from client hooking windows 
     // update lead gen 
    } 
} 

當我打電話hooking.submit(resultJson);在我的代碼後由於某種原因,它調用我HookingController(即當前頁)的索引操作。任何人都知道如何從Hooking.cs正確調用Submit函數?

+1

看起來像你引用的博客文章現在是一個死鏈接。我發現張貼在這裏:http://beyondrelational.com/modules/24/syndicated/370/Posts/9623/signalr-with-mvc3-chat-app-build-asynchronous-real-time-persistant-connection-websites。 aspx –

+0

謝謝,我現在也修改了原始問題中的鏈接 –

回答

2

有兩個問題與此 - 1。出於某種原因,一箇舊版本的jQuery。驗證是造成錯誤,但更新它對此進行了排序。 2.我試圖拋出一個可空的int值,我猜是不支持的。我敢肯定,有更優雅的方式解決這個問題,但我只是投我爲空的數據輸入到串並分析他們,如果不爲空

2

你看看網絡流量螢火蟲或其他一些工具嗅探HTTP流量,以確保你有沒有錯誤?這可能與路由有關。

另外一個側面說明,你不需要任何序列化,我們爲你做的。只需來回發送對象。

當你在一個MVC應用程序是你需要包括輪轂腳本就像任何其他靜態腳本:

<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script> 
+0

乾杯,是的,我包含了正確的腳本。 Firebug顯示'GET http:// localhost:2823/Hooking,POST signalr/negotiate',然後當我的腳本調用'submit'另一個'GET http:// localhost:2823/Hooking'時。在這一點上,我會希望有一些調用我在Hooking.cs中定義的函數 –

+0

並且所有請求都是200? – davidfowl

+0

是的,他們是,實際上鉻是標記,作爲一個錯誤,雖然由於某種原因顯示'意想不到的響應代碼:200' –

1

jquery.validate.js是罪魁禍首。出於某種原因,它觸發了GET請求,在排除了js文件後,SignalR請求開始觸發POST請求。也許我應該更新它作爲喬丹沃爾沃工作提到。