很久之前發表過一篇名為《通過三個demo學會signalr的三種實現方式》的文章,在那篇文章裡面詳細介紹了在web應用下的常用signalr實現方法,而今天我們來利用signalr來實現其它的一些用法,比如:b/s 與 c/s互相通訊,比如:c/s與c/s通訊。
一、b/s 與 c/s互相通訊(asp.net 向 winform 廣播訊息),先看效果如下:
如上圖所示,採用服務端傳送訊息(指在c#**傳送),然後winform接收訊息。
如上圖所示,採服客戶端(瀏覽器)js **物件傳送訊息,然後winform接收訊息。
上述示例的實現**如下:
asp.net 服務端**:
myhub:
[hubname("myhub")]
public class myhub : hub
private void sendmsg(string msg)
[hubmethodname("broadcast")]
public void broadcast(string msg)
}public override system.threading.tasks.task onconnected()
[hubmethodname("testconnect")]
public void testconnect()
}
asp.net 頁面:(演示就用了伺服器控制項,以便到服務端進行傳送)
廣播訊息:
asp.net cs**:
protected void button1_click(object sender, eventargs e)
}
在這裡特別說明一下,因為myhub是有連線時才會生成例項,我們無法直接在服務端獲取到myhub的例項,所以採取了在myhub建構函式時,將sendmsg暴露給靜態的 sendmsgaction委託,這樣服務端就可以直接通過判斷sendmsgaction是否有訂閱來決定是否可以傳送訊息。這是乙個取巧的的方式,當然如果大家有更好的方法,歡迎交流。
廣播訊息:
這裡有乙個注意點:我們在定義myhub類時,按照csharp的**規範是:類名 及方法名首字母都大寫,但js自動生成的**js類及方法名卻會變成js的命規範,即:函式名首個字母是小寫,如:myhub -->myhub,所以為了便於相容js呼叫,在定義hub類時,用上hubname及hubmethodname特性,指定統一名稱。
winform客戶端接收訊息步驟:
1.通過nuget安裝signalr.client相關元件
/// /// 建立hub**類,並啟動
///
private void createhubconnection()
/// /// 接收signalr服務端的訊息
///
///
private void recvmsg(string msg)
\r\n", datetime.now, o);
}, msg);
}private void form1_formclosed(object sender, formclosedeventargs e)
private void button1_click(object sender, eventargs e)
}通過上述**可以看出,與asp.net 頁面生成的js**類的方式原理基本相同,都是通過**類來與服務端進行互動,都是通過http協議進行通訊。
二、c/s 與 c/s 互相通訊(winform與winform),其實本質上服務端還是b/s,只不過我們採取了signalr self host(裡面用到了owin self host),也就是將**寄宿到winform而矣,只是我們通過winform操作更方更而矣,效果如下:
winform服務端實現流程:
1.先通過nuget 分別安裝microsoft.aspnet.signalr、microsoft.aspnet.signalr self host,如下圖示:
2.新增startup類檔案,並在裡面新增對映signalr,**如下:(與asp.net服務端的startup**相同)
public class startup
}
3.編寫owin 的寄宿**,myhub與上文中的相同,故不再貼出
public partial class form1 : form
private void form1_load(object sender, eventargs e)
catch (exception ex)
}private void form1_formclosed(object sender, formclosedeventargs e)
catch
}private void button1_click(object sender, eventargs e)
}public void showmsg(string msg)
));}
}
這裡有幾個小細節需要注意:
1.安裝microsoft.aspnet.signalr後會在專案中生成sciprts資料夾,這個在winform專案時就可以刪除掉;
2.安裝microsoft.aspnet.signalr self host後,編譯可能無問題,但執行起來時,可能會報朱找到匹配的owin程式集,這個是因為owin版本問題,只需單獨再安裝一下指定的owin版本即可。
SignalR的另類實現技巧
原文 signalr的另類實現技巧 很久之前發表過一篇名為 通過三個demo學會signalr的三種實現方式 的文章,在那篇文章裡面詳細介紹了在web應用下的常用signalr實現方法,而今天我們來利用signalr來實現其它的一些用法,比如 b s 與 c s互相通訊,比如 c s與c s通訊。一...
SignalR的另類實現技巧
原文 signalr的另類實現技巧 很久之前發表過一篇名為 通過三個demo學會signalr的三種實現方式 的文章,在那篇文章裡面詳細介紹了在web應用下的常用signalr實現方法,而今天我們來利用signalr來實現其它的一些用法,比如 b s 與 c s互相通訊,比如 c s與c s通訊。一...
SignalR的另類實現技巧
很久之前發表過一篇名為 通過三個demo學會signalr的三種實現方式 的文章,在那篇文章裡面詳細介紹了在web應用下的常用signalr實現方法,而今天我們來利用signalr來實現其它的一些用法,比如 b s 與 c s互相通訊,比如 c s與c s通訊。一 b s 與 c s互相通訊 asp...