SignalR实现页面实时监控
1.页面截图
2.数据库截图
3.前端代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@{ ViewBag.Title = "ToDB"; } <style> </style> <div style="margin:0 auto;width:auto;text-align:center"> <h3>日志导入数据库</h3> </div> <div></div> <div> <div style="width: 810px; margin: 0 auto; "> <button id="btnToDB" style="border: 1px solid #e8e8e8; color: #808080; margin-bottom: 10px; ">导入并监控</button> </div> <div style="border: 1px solid #e8e8e8; width: 800px; height: 400px; margin: 0 auto; color: #808080; font-size: 13px; padding:5px; overflow:auto;"> 监控信息如下: <ul id="discussion"></ul> <div id="msg_end" style="height:0px; overflow:hidden;"></div> </div> <br /> <div style="border: 1px solid #e8e8e8; width: 800px; height: 55px; margin: 0 auto; color: #808080; font-size: 13px; padding: 5px; overflow: auto;"> 本页面用到的技术:SignalR。 <br /> SignalR技术功能:数据实时同步到浏览器,不需要刷新。 <br /> SignalR技术说明:后台动态执行javascript脚本,前台监控后台执行的结果并将结果显示到浏览器上,可以用于网页版的聊天功能。 </div> </div> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.signalR-2.0.3.min.js"></script> <script src="~/signalr/hubs"></script> <script> $(function () { var i = 0; //指向MyHub.cs类,首字母一定要小写($.connection.myHub不能写成$.connection.MyHub) var chat = $.connection.myHub; // 调用MyHub创建的动态方法 chat.client.addNewMessageToPage = function (data) { if (data.status == 1) { ++i; $('#discussion').append('<li style="padding:5px;">' + i + '.' + data.filename + '[' + data.logscount + '];</li>'); msg_end.scrollIntoView(); //页面自动滚动 } else { $('#discussion').append('<li style="padding:5px;color:red">导入结束!</li>'); msg_end.scrollIntoView(); //页面自动滚动 } }; $.connection.hub.start().done(function () { $("#btnToDB").click(function () { chat.server.toDB(); }) }); }); </script>
4.后端代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary> /// 日志导入到数据库 /// </summary> public void ToDB() { var loganalysis = new LogAnalysisBll(); var logbll = new LogsBll(); var json = new { filename = "", logscount = 0, status = 0 }; //获取所有日志名称 var list = loganalysis.GetFields(logPath); if (list != null && list.Count > 0) { //时间倒序排列 list = list.OrderByDescending(x => x.AsDatetime()).ToList(); } foreach (var item in list) { var month = item.AsDatetime().Month.ToString(); var day = item.AsDatetime().Day.ToString(); month = month.Length == 1 ? "0" + month : month; day = day.Length == 1 ? "0" + day : day; LogInfoModel fileModel = new LogInfoModel() { LogName = item }; var fileSave = logbll.InsertFile(fileModel); //插入日志名称到数据库 //根据日志路径分析日志,获取列表 var logslist = loganalysis.GetLog(string.Format("{4}{0}\\{1}\\{2}\\{3}.log", item.AsDatetime().Year, month, day, item.AsDatetime().ToString("yyyyMMdd"), logPath)); if (fileSave > 0) //如果数据库不存在此日志文件,则添加日志文件和问件包含的日志 { foreach (var log in logslist) { var logModel = log; logModel.FileId = fileSave; logbll.InsertLog(logModel); } json = new { filename = item, logscount = logslist.Count, status = 1 }; Clients.All.addNewMessageToPage(json); } else //如果数据库已存在此文件,则检索此文件中所有的日志,将还未添加到数据库中的日志添加到数据库 { var model = logbll.GetLastLog(item); //获取数据库当前文件的最后一个日志 var lastTime = model.LogCreateTime.AsString(19).AsDatetime(); var loglist = logslist.Where(x => x.LogCreateTime.AsString(19).AsDatetime() > lastTime).ToList(); var a = loglist.Count; foreach (var log in loglist) { var logModel = log; logModel.FileId = model.FileId; logbll.InsertLog(logModel); } json = new { filename = item, logscount = loglist.Count, status = 1 }; Clients.All.addNewMessageToPage(json); } } json = new { filename = "", logscount = 0, status = 0 }; Clients.All.addNewMessageToPage(json); }
对于SignalR使用不成功的可以问我,我不是很了解但是使用成功了,遇到部分问题也解决了,QQ:905679027