本章我們將學習將signalr服務托管在非web應用程序。之前我們一直是通過IIS部署signalR服務,今天我們的服務將要完全擺脫IIS的約束。在某種情況下可能無法用IIS部署服務,或者我們并不需要重量級的IIS進行部署,直接部署在控制臺應用程序中更加方便簡單,獲取還有其他各種各樣的原因。
由于有owin提供的解耦功能我們可以不在修改代碼的情況下部署到其他地方。只需要安裝一個包:Microsoft.Owin.Host .HttpListener
即可。(之前在web上部署的時候我們安裝的是Microsoft.Owin.Host.SystemWeb
)
這個包可以提供自托管的功能,打開一個端口等待http請求。
接下來我們就是先將signalR部署在控制臺程序上,以及windows服務中。
首先我們先在nuget命令行中輸入install-package Microsoft.aspNet.SignalR.SelfHost
進行安裝
安裝好后可以發現引用大致如圖所示
最主要的差別是這兩處
安裝完后再packages文件夾中會有SelfHost文件夾里面有個readme.txt文件,有簡單使用說明,如下圖所示:
其中包括了如何配置和啟動。
根據要請我們新建一個Startup文件,在里面輸入代碼,同時我們的控制臺僅僅是服務,想要其他程序能訪問到我們我們必須要開啟跨域,通過命令Install-Package Microsoft.Owin.Cors
進行安裝即可,然后我們就做相應的配置。
我們的相關配置已經完成,和在web部署幾乎一模一樣,處理安裝的組建略有差別。
接下來我們創建一個Hub。
服務端有一個計算加法的服務
服務端就搭建好了,現在我們需要創建一個客戶端,客戶端我也不再用傳統web客戶端,我們創建一個winform應用程序(WPF類似)
首先需要安裝signalr .net client,之前在web應用程序作為客戶端安裝的是javascript client
首先搭建一個界面如圖:
點擊連接時創建調用代理并連接
連接成功彈出消息框
windows服務和普通的程序不一樣,它有不同的生命周期。windows服務可以繼承自System.ServicePRocess.ServiceBase。
創建一個新的項目選擇windows service,如圖所示
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 下載
新聞熱點
疑難解答