之前提到SignalR代理在網頁,通過生成的Js來完成相關的功能。但我不禁想一個問題,
難到SignalR的服務端就能寄存在web端嗎,通過訪問網頁能方式才能啟動服務,還有客戶端
也只能在web端嗎?經過看官網的教程得到 了結論,兩者的答案都是否定的。
關於上一篇的hub名第一個為小寫的問題,還有調用客戶端和服務端方式的問題,后面的教程
提到,這些名字都是用駝峰命名法的,即使定義時收字母是大寫,調用時首字母小寫也能調到。
1.客戶端
SignalR的客戶端可是DOTNET下所有的客戶端,包括windowsForm、WPF等。
下列以winform為例說明問題,在DOTNET客戶端實現SignalR的客戶端需要添加
組件Microsoft.AspNet.SignalR.Client。
1.1新建Hub連接實例 HubConnection hubConnection=new HubConnection("uri");
其中url為SignalR的寄宿地址。這里仍然是寄宿在web端。
2.新建Hub代理實例 IHubProxy hubProxy=hubConnection.CreateHubProxy("myHub");
其中myHub為自定的Hub類。
3.通過代理實例注冊客戶端實例hubProxy.On("functionName",()=>{MessageBox.Show("可以");});
其中functionName為方法名,后面的為Lamda表達式表示方法體。
4.開啟連接 hunConnection.Start();
5.調用服務端方法 hubProxy.Invoke("send");
其中send為服務端方法名,首字母也遵循駝峰命名法。
第二個參數是方法的參數,這里沒傳參數。
2.服務端--讓服務端寄宿在DOTNET客戶端
這里仍然以Winform為例說明問題。
2.1.引入組件Microsoft.AspNet.SignalR.SelfHost和Microsoft.Owin.Cors。
2.2.新建Startup類,用於配置Hub,代碼如下
class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR();
2.3.新建集線器類,用戶hub的服務端,處理業務邏輯。
public class MyHub : Hub { public void Send() { Clients.All.addMessage(); } }
2.4.定義一個字符串,用作hub服務端的web地址。例如:
string url = "http://localhost:61020/"
2.5開啟連接
WebApp.Start(url);
這個方法的內部會去執行Startup類的Configuration方法配置Hub。
和直接生成的集線器類一直,只是這里寄宿在的Winform上。
當然這里還是要執行Winform才能運行SignalR,時間有限,日后發現更好的
辦法會及時更新。