Asp.Net SignalR 集線器不使用代理的實現


不使用生成代理JS的實現

可能有同學會覺得使用集線器很麻煩,要么引入虛擬目錄,要么在生成期間生成js文件,再引入js文件進行開發。難道就沒有比較清爽的方式嗎?這個當然是有的,先不要(。・∀・)ノ゙嗨皮起來, 看完后再做出選擇

簡單看一下生成的js文件,其實代碼一大堆,我們也可以根據這個js來寫一個

image

首先我們需要有連接對象

let hubDemo = $.hubConnection("/simpleHub");

然后創建HubDemo類的代理

var proxy = hubDemo.createHubProxy("HubDemo");

然后就可以開啟連接了,這里使用了代理對象執行 HelloService方法

hubDemo.start().done(function () {
            proxy.invoke("HelloService");
        });

記得HelloService方法里會調用HelloClient函數,所以這個也是不能少的

proxy.on("helloClient", function() {
            console.log("收到服務器的問候");
        })

這時候可以運行起來看看效果了,嗯 這看起來很完美

image

完整代碼如下,可以看到這些類名和方法名都是需要去指定的,也就是雖然完全解耦但是這對開發帶來了難度,而這些代理也只是對代理生成的js的簡化版,而且也沒有智能提醒了,因為要自己寫-.- 兩種方式各有利弊,用哪個都不錯。根據項目情況自行選擇吧

let hubDemo = $.hubConnection("/simpleHub");

        var proxy = hubDemo.createHubProxy("HubDemo");

        hubDemo.start().done(function () {
            proxy.invoke("HelloService");
        });

        proxy.on("helloClient", function() {
            console.log("收到服務器的問候");
        });

 

HubName與HubMethodName

我們可以使用這兩個特性為我們的方法與類進行重命名,比如方法名是Hello,但是我想要客戶端調用的是MyHello。

[HubMethodName("Hello")]
        public void HelloService(string age1, int age2)
        {
            Clients.All.helloClient();
        }

HubName作用與HubMethodName的作用是類似的,不同的是作用於類上

[HubName("HubDemo2")]
public class HubDemo : Hub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM