前不久的工作中,需要集成signalr和vue實現一個消息推送的前端展示頁面,集成倒是很順利,nuget和npm就解決了問題,但接下來的部署上遇到了幾個問題,需要記錄一下:
問題1 : 集成了redis緩存鏈接,在部署時未安裝redis,導致signalr一直啟動不起來,但又明確的提示錯誤。
在開發時使用了redis緩存,並配置了signalr使用redis,部分方法在使用上沒有用到redis,而部署時的業務不需要redis,因此未安裝redis,運行時一直出現signalr連接不上的問題,
查了很多資料都是signalr2.0 的版本的錯誤,最后嘗試去掉
//使用redis GlobalHost.DependencyResolver.UseRedis(scaleoutConfiguration);
果然是這里導致,頁面可以正確的連接signalr服務器了,未用到redis,不能再啟動時配置signalr使用redis
問題2 : 在本機IIS上發布運行正確,更換到其他人的電腦IIS發現不能鏈接signalR服務端,錯誤
vendor.js:45 GET http://localhost:6677/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22remindhub%22%7D%5D&_=1543892771079 404 (Not Found)send @ vendor.js:45d.extend.ajax @ vendor.js:45e.transports._logic.ajax @ vendor.js:54e.fn.e.start @ vendor.js:54F._.deferredStartHandler @ vendor.js:54d.event.dispatch @ vendor.js:45s.handle @ vendor.js:45 ISMS.js:1 Error: Error during negotiation request.(…) ISMS.js:1 Could not connect ISMS.js:1 disconnected ISMS.js:1 reconnect vendor.js:54 Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'></script>.
因為本機和部分電腦的發布是正常的,唯獨單獨的那台服務器運行會報錯,推測是環境的問題,經過搜索資料發現需要增加以下配置
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
試着在出錯的服務器的web.config加上配置后,問題解決