一步一步學習SignalR進行實時通訊_9_託管在非Web應用程序

原文: 一步一步學習SignalR進行實時通訊_9_託管在非Web應用程序

一步一步學習SignalR進行實時通訊\_9_託管在非Web應用程序 javascript


前言

本章咱們將學習將signalr服務託管在非web應用程序。以前咱們一直是經過IIS部署signalR服務,今天咱們的服務將要徹底擺脫IIS的約束。在某種狀況下可能沒法用IIS部署服務,或者咱們並不須要重量級的IIS進行部署,直接部署在控制檯應用程序中更加方便簡單,獲取還有其餘各類各樣的緣由。
因爲有owin提供的解耦功能咱們能夠不在修改代碼的狀況下部署到其餘地方。只須要安裝一個包:Microsoft.Owin.Host .HttpListener便可。(以前在web上部署的時候咱們安裝的是Microsoft.Owin.Host.SystemWeb
這個包能夠提供自託管的功能,打開一個端口等待http請求。
接下來咱們就是先將signalR部署在控制檯程序上,以及windows服務中。html

部署在控制檯應用程序

安裝自託管包

首先咱們先在nuget命令行中輸入install-package Microsoft.AspNet.SignalR.SelfHost進行安裝
安裝好後能夠發現引用大體如圖所示

最主要的差異是這兩處

安裝完後再packages文件夾中會有SelfHost文件夾裏面有個readme.txt文件,有簡單使用說明,以下圖所示:


其中包括瞭如何配置和啓動。java

安裝跨域包

根據要請咱們新建一個Startup文件,在裏面輸入代碼,同時咱們的控制檯僅僅是服務,想要其餘程序能訪問到咱們咱們必需要開啓跨域,經過命令Install-Package Microsoft.Owin.Cors進行安裝便可,而後咱們就作相應的配置。

咱們的相關配置已經完成,和在web部署幾乎如出一轍,處理安裝的組建略有差異。
接下來咱們建立一個Hub。

服務端有一個計算加法的服務
服務端就搭建好了,如今咱們須要建立一個客戶端,客戶端我也再也不用傳統web客戶端,咱們建立一個winform應用程序(WPF相似)web

winform客戶端

首先須要安裝signalr .net client,以前在web應用程序做爲客戶端安裝的是javascript client
windows

設計界面

首先搭建一個界面如圖:

點擊鏈接時建立調用代理並鏈接跨域

鏈接


鏈接成功彈出消息框

ide

完整實現效果

windows服務

windows服務和普通的程序不同,它有不一樣的生命週期。windows服務能夠繼承自System.ServiceProcess.ServiceBase。
建立一個新的項目選擇windows service,如圖所示
post

建立服務

  
  
  
  
public partial class SignalRService : ServiceBase{ private IDisposable _webApp; public SignalRService() { InitializeComponent(); } protected override void OnStart(string[] args) { var address = (args != null && args.Length > 0) ? args[0] : "http://localhost:22222"; _webApp = WebApp.Start<Startup>(address); } protected override void OnStop() { _webApp.Dispose(); }}

在OnStart中開始服務,在OnStop釋放
在Progarm.cs程序入口中啓動服務學習

  
  
  
  
static void Main(){ ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new SignalRService() }; ServiceBase.Run(ServicesToRun);}

安裝服務

windows服務不能經過VS啓動,須要在系統中安裝。

在服務界面右擊選擇Add Installe

會生成一個安裝文件

serviceProcessInstaller1屬性中Account選擇憑證類型

serviceInstaller1中serviceName是windows服務中的名稱
starttype是啓動類型,可選擇自動或手動啓動
description是服務的描述
打開vs2013開發人員命令提示符(須要管理員身份進入操做)

打開後進入程序目錄,輸入installutil [exeName]命令[exeName]包括後綴

輸入installutil [exeName] /u進行卸載
輸入命令後回車會彈出使用的用戶憑證
測試

或者在安裝命令後加上參數/username和/password
如:installutil signalrservice.exe /username=jake /password=1234
若用戶憑證有誤則會回滾安裝,所以不用擔憂會出什麼問題。


可是試了好幾回一直有誤,網上查了下用戶名好像須要輸入全稱。爲了簡單起見直接用本地系統登陸


從新在輸入命令(無需用戶密碼)便可完成安裝

安裝完成在服務中便可找到,

啓動服務


輸入參數點擊啓動便可

鏈接服務

安裝好後啓動客戶端測試下,此服務���hub我從控制檯程序複製過去,因此如出一轍

注意修改端口

結束語

今天經過簡單的2個小例子講解了如何將signalr部署在非web環境中,以及.net client如何鏈接signalr服務

源碼下載

非web signalR服務
客戶端

本文發佈至做業部落

參考文獻

SignalR Programming in Microsoft ASP.NET pdf 下載

相關文章
相關標籤/搜索