当前位置: 首页 > news >正文

东道网站建设如何找企业联系做网站

东道网站建设,如何找企业联系做网站,微信公众平台可以导入wordpress,网站服务器和空间的区别工作上有个业务#xff0c;.Net Core WebAPI作为服务端#xff0c;需要将运行过程中产生的日志分类#xff0c;并实时推送到各种终端进行报警#xff0c;终端有桌面(WPF)、移动(Xamarin.Forms)、网站(Angular.JS)等#xff0c;使用SignalR进行警报日志推送。微信公众号.Net Core WebAPI作为服务端需要将运行过程中产生的日志分类并实时推送到各种终端进行报警终端有桌面(WPF)、移动(Xamarin.Forms)、网站(Angular.JS)等使用SignalR进行警报日志推送。微信公众号Dotnet9网站Dotnet9问题或建议请网站留言 如果对您有所帮助欢迎赞赏。https://dotnet9.com阅读导航本文背景代码实现本文参考1.本文背景工作上有个业务.Net Core WebAPI作为服务端需要将运行过程中产生的日志分类并实时推送到各种终端进行报警终端有桌面(WPF)、移动(Xamarin.Forms)、网站(Angular.JS)等使用SignalR进行警报日志推送。下面是桌面端的测试效果 2.代码实现整个系统由服务端、桌面端、网站、移动端组成结构如下2.1 服务端与客户端都使用的日志实体类简单的日志定义服务端会主动将最新日志通过AlarmLogItem实例推送到各个终端/// summary /// 报警日志 /// /summary public class AlarmLogItem {public string Id { get; set; }/// summary/// 日志类型/// /summarypublic AlarmLogType Type { get; set; }/// summary/// 日志名称/// /summarypublic string Text { get; set; }/// summary/// 日志详细信息/// /summarypublic string Description { get; set; }/// summary/// 日志更新时间/// /summarypublic string UpdateTime { get; set; } }public enum AlarmLogType {Info,Warn,Error }2.2 服务端使用 .Net Core 2.2 搭建的Web API项目2.2.1 集线器类AlarmLogHub.cs定义集线器Hub类AlarmLogHub继承自Hub用于SignalR通信看下面的代码没加任何方法您没看错public class AlarmLogHub : Hub {}2.2.2 Startup.cs需要在此类中注册SignalR管道及服务在下面两个关键方法中用到B/S后端的朋友非常熟悉了。ConfigureServices方法添加SignalR管道是这个说法吧services.AddSignalR(options { options.EnableDetailedErrors true; });Configure方法注册SignalR服务地址端口用的8022客户端访问地址是http://localhost:8022/alarmlogapp.UseSignalR(routes {routes.MapHubAlarmLogHub(/alarmlog); });2.2.3 SignalRTimedHostedService.cs这是个关键类用于服务端主动推送日志使用Baidu、Google好久才找到站长技术栈以C/S为主B/S做的不多没人指点心酸参考网址How do I push data from hub to client every second using SignalR 。该类继承自IHostedService作为服务自启动乱说的通过SignalRTimedHostedService 的构造函数依赖注入得到IHubContextAlarmLogHub的实例用于服务端向各客户端推送日志使用在StartAsync方法中开启定时器模拟服务端主动推送警报日志见 DoWork 方法internal class SignalRTimedHostedService : IHostedService, IDisposable {private readonly IHubContextAlarmLogHub _hub;private Timer _timer;//模拟发送报警日志ListAlarmLogItem lstLogs new ListAlarmLogItem {new AlarmLogItem{ TypeAlarmLogType.Error,TextOK WebSocket断连,Description尝试连接50次未成功重连},new AlarmLogItem{ TypeAlarmLogType.Warn,TextOK WebSocket断开重连,Description尝试连接5次成功重连},new AlarmLogItem{ TypeAlarmLogType.Warn,TextOK Restfull断连,Description尝试连接30次成功重连},new AlarmLogItem{ TypeAlarmLogType.Error,TextOK WebSocket断连,Description第一次断开链接},new AlarmLogItem{ TypeAlarmLogType.Info,TextOK WebSocket连接成功,Description首次成功连接},new AlarmLogItem{ TypeAlarmLogType.Error,TextOK WebSocket断连,Description尝试连接第7次未成功重连}};Random rd new Random(DateTime.Now.Millisecond);public SignalRTimedHostedService(IHubContextAlarmLogHub hub){_hub hub;}public Task StartAsync(CancellationToken cancellationToken){_timer new Timer(DoWork, null, TimeSpan.Zero,TimeSpan.FromSeconds(1));return Task.CompletedTask;}private void DoWork(object state){if (DateTime.Now.Second % rd.Next(1, 3) 0){AlarmLogItem log lstLogs[rd.Next(lstLogs.Count)];log.UpdateTime DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss.fff);_hub.Clients.All.SendAsync(ReceiveAlarmLog, log);}}public Task StopAsync(CancellationToken cancellationToken){_timer?.Change(Timeout.Infinite, 0);return Task.CompletedTask;}public void Dispose(){_timer?.Dispose();} }SignalRTimedHostedService 类作为Host服务(继承自 IHostedService)需要在Startup.cs的ConfigureServices方法中注册管道(是吧各位有没有B/S比较好的书籍推荐站长打算有空好好学学)services.AddHostedServiceSignalRTimedHostedService();服务端关键代码已经全部奉上下面主要说说桌面端和移动端代码其实两者代码类似。2.3 网站参考 index.html2.4 桌面端(WPF)使用 .Net Core 3.0创建的WFP工程需要引入Nuget包Microsoft.AspNetCore.SignalR.Client界面用一个ListView展示收到的日志GridListBox x:NamemessagesList RenderTransformOrigin-0.304,0.109 BorderThickness1 BorderBrushGainsboro/ /Grid后台写的简陋直接在窗体构造函数中连接服务端SignalR地址http://localhost:8022/alarmlog 监听服务端警报日志推送ReceiveAlarmLog。using AppClient.Models; using Microsoft.AspNetCore.SignalR.Client; using System; using System.Threading.Tasks; using System.Windows;namespace SignalRChatClientCore {/// summary/// Interaction logic for MainWindow.xaml/// /summarypublic partial class MainWindow : Window{HubConnection connection;public MainWindow(){InitializeComponent();connection new HubConnectionBuilder().WithUrl(http://localhost:8022/alarmlog).Build();connection.Closed async (error) {await Task.Delay(new Random().Next(0, 5) * 1000);await connection.StartAsync();};connection.OnAlarmLogItem(ReceiveAlarmLog, (message) {this.Dispatcher.Invoke(() {messagesList.Items.Add(message.Description);});});try{connection.StartAsync();messagesList.Items.Add(Connection started);}catch (Exception ex){messagesList.Items.Add(ex.Message);}}} }2.4 移动端移动端其实和桌面端类似因为桌面端使用的 .Net Core 3.0移动端使用的 .NET Standard 2.0都需要引入Nuget包Microsoft.AspNetCore.SignalR.Client。界面使用ListView展示日志这就不贴代码了使用的MVVM方式直接贴ViewModel代码吧大家只看个大概不要纠结具体代码参照桌面.cs代码是不是一样的using AppClient.Models; using AppClient.Views; using Microsoft.AspNetCore.SignalR.Client; using System; using System.Collections.ObjectModel; using System.Diagnostics; using System.Threading.Tasks; using Xamarin.Forms; using System.Linq;namespace AppClient.ViewModels {/// summary/// 报警日志VM/// /summarypublic class AlarmItemsViewModel : BaseViewModel{private ViewState _state ViewState.Disconnected;/// summary/// 报警日志列表/// /summarypublic ObservableCollectionAlarmLogItem AlarmItems { get; set; }public Command LoadItemsCommand { get; set; }//连接报警服务端private HubConnection _connection;public AlarmItemsViewModel(){Title 报警日志;AlarmItems new ObservableCollectionAlarmLogItem();LoadItemsCommand new Command(async () await ExecuteLoadItemsCommand());//收到登录成功通知MessagingCenter.SubscribeLoginViewModel, LoginUser(this, LoginSuccess, async (sender, userInfo) {//DisplayAlert(登录成功, userInfo.UserName, 确定);});MessagingCenter.SubscribeNewItemPage, AlarmLogItem(this, 添加项, async (obj, item) {var newItem item as AlarmLogItem;AlarmItems.Add(newItem);await DataStore.AddItemAsync(newItem);});ConnectAlarmServer();}async Task ExecuteLoadItemsCommand(){if (IsBusy)return;IsBusy true;try{AlarmItems.Clear();var items await DataStore.GetItemsAsync(true);foreach (var item in items){AlarmItems.Add(item);}}catch (Exception ex){Debug.WriteLine(ex);}finally{IsBusy false;}}private async Task ConnectAlarmServer(){if (_state ViewState.Connected){try{await _connection.StopAsync();}catch (Exception ex){return;}_state ViewState.Disconnected;}else{try{_connection new HubConnectionBuilder().WithUrl(App.Setting.AlarmHost).Build();_connection.OnAlarmLogItem(ReceiveAlarmLog, async (newItem) {AlarmItems.Add(newItem);await DataStore.AddItemAsync(newItem);});_connection.Closed async (error) {await Task.Delay(new Random().Next(0, 5) * 1000);await _connection.StartAsync();};await _connection.StartAsync();}catch (Exception ex){return;}_state ViewState.Connected;}}private enum ViewState{Disconnected,Connecting,Connected,Disconnecting}} }关键代码已经贴完了希望对大家能有所帮助。3.参考.NET 客户端 SignalR ASP.NET CoreSignalR-samplesHow do I push data from hub to client every second using SignalR除非注明文章均由 Dotnet9 整理发布欢迎转载。转载请注明本文地址https://dotnet9.com/6913.html欢迎扫描下方二维码关注 Dotnet9 的微信公众号本站会及时推送最新技术文章微信公众号“dotnet9_com”Dotnet9.com
http://www.zqtcl.cn/news/398459/

相关文章:

  • 网站建设技术部职责门户网站工作总结
  • 用个人电脑做服务器建网站急切网头像在线制作图片
  • 企业网站制作教程浙江省住房和城乡建设厅网站
  • 一个网络空间如何做两个网站哪个网站兼职做设计比较好
  • jquery代码做的网站免费搭建网站模板
  • 铁路建设监理协会官方网站邯郸市网
  • 马鞍山集团网站建设客流分析系统公司
  • 淘客网站怎么做啊抖音怎么挂小程序赚钱
  • 在哪里申请网站域名美妆销售网站开发的目的
  • 网站自动跳转施秉网站建设
  • 聊城做网站的公司咨询学校网站模板 dedecms
  • 网站域名查询赣州网站设计有哪些
  • 网站设计做多宽150m网站空间流量大吗
  • 制作php网站用什么软件东莞东坑网站建设
  • 怎样做网站外部样式wordpress爱找主题
  • 自己搭建服务器做网站要多久问答网站如何优化
  • 网站用的服务器小程序拉新项目
  • 建设银行 访问的网站出错珠宝类网站模板
  • 网站百度关键词排名软件xampp里wordpress安装教程
  • 杭州网站设计建立企业网站专业做电脑系统下载网站好
  • 哈尔滨建设网站成本网站建设无广告
  • 发布网站搭建教程云排名网站
  • 无锡大型网站建设房地产景区网站建设方案
  • 自学网站建设工资公众号怎么开通直播功能
  • 网站建设上市公司wordpress park主题
  • 百度网站建设一年多少钱奇艺广州网站建设 熊掌号
  • 建设网站怎么收费标准网站和自媒体都可以做
  • 网站自己怎么做无锡常规网络营销是什么
  • 活泼风格的网站crm免费客户管理系统
  • 网站系统发生错误百度seo灰色词排名代发