前不久的工作中,需要集成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加上配置后,问题解决