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

2008 iis 网站山东人才招聘信息网官网

2008 iis 网站,山东人才招聘信息网官网,php怎么做网站教程,建网站的软件 优帮云ASP.NET SignalR 是几年前推出的工具#xff0c;可供 ASP.NET 开发人员使用#xff0c;以向应用程序添加实时功能。只要基于 ASP.NET 的应用程序必须接收来自服务器#xff08;从监视系统到游戏#xff09;的频繁异步更新#xff0c;就属于典型的库用例。这些年来#xf… ASP.NET SignalR 是几年前推出的工具可供 ASP.NET 开发人员使用以向应用程序添加实时功能。只要基于 ASP.NET 的应用程序必须接收来自服务器从监视系统到游戏的频繁异步更新就属于典型的库用例。这些年来我还使用它来刷新 CQRS 体系结构方案中的 UI以及在 socialware 应用程序中实现与 Facebook 类似的通知系统。从更具技术性的角度来看SignalR 是抽象层生成依据为一部分可以在完全兼容的客户端和服务器之间建立实时连接的传输机制。客户端通常为 Web 浏览器服务器通常为 Web 服务器但两者都不仅限于此。ASP.NET SignalR 属于 ASP.NET Core 2.1。虽然库的总体编程模型与经典 ASP.NET 的编程模型类似但库本身实际上已经完全重写。尽管如此只要开发人员适应各方面的变化应该就可以快速熟练掌握新方案。本文将介绍如何在规范 Web 应用程序中使用新库来监视可能会很漫长的远程任务。设置环境可能需要以下多个 NuGet 包才能使用库Microsoft.AspNetCore.SignalR 和 Microsoft.AspNetCore.SignalR.Client。前一个包提供核心功能后一个包是 .NET 客户端且只有在生成 .NET 客户端应用程序时才需要。此示例将通过 Web 客户端来使用库因此改为需要 SignalR NPM 包。本文稍后将详细介绍这一点。请注意在基于 MVC 应用程序模型的 Web 应用程序的上下文中使用 SignalR 并不是一项强制性要求。可以直接通过 ASP.NET Core 控制台应用程序使用 SignalR 库服务还可以在控制台应用程序中托管 SignalR 的服务器部分。应用程序的启动类需要包含一些特定代码这一点不足为奇。具体而言将把 SignalR 服务添加到系统服务集合中并将它配置为可供实际使用。图 1 展示了使用 SignalR 的启动类的典型状态。图 1SignalR ASP.NET Core 应用程序的启动类public class Startup {public void ConfigureServices(IServiceCollection services){services.AddMvc();services.AddSignalR();}public void Configure(IApplicationBuilder app){app.UseStaticFiles();app.UseDeveloperExceptionPage();// SignalR    app.UseSignalR(routes {routes.MapHubUpdaterHub(/updaterDemo);routes.MapHubProgressHub(/progressDemo);});app.UseMvcWithDefaultRoute();} }SignalR 服务配置包括一个或多个服务器路由的定义这些路由绑定到服务器端环境中的一个或多个终结点。MapHubT 方法将请求 URL 中的指定名称链接到 Hub 类的实例中。Hub 类既是实现 SignalR 协议的核心所在也是处理客户端调用的位置所在。为服务器端打算接受和处理的每组逻辑相关调用创建 Hub。SignalR 对话由双方之间交换的消息组成一方对另一方调用方法的结果可能是没有响应可能是收到一个或多个响应也可能是仅收到错误通知。任何 ASP.NET Core SignalR 服务器实现都会公开一个或多个 Hub。在图 1 中有两个 Hub 类UpdaterHub 和 ProgressHub绑定到唯一字符串这些字符串在内部用于生成实际调用的 URL 目标。Hub 类SignalR 应用程序中的 Hub 类是普通的简单类继承自 Hub 基类。此基类仅用于免去开发人员一次又一次编写相同样本代码的麻烦。基类只提供某基础结构而不提供预定义行为。具体而言它定义了图 2 中的成员。图 2Hub 基类的成员成员说明客户端公开当前由 Hub 托管的客户端列表的属性。上下文公开当前调用方上下文的属性包括连接 ID 和用户声明若有等信息。组公开各客户端子集的属性这些客户端可能已经以编程方式定义为完整客户端列表中的组。组通常创建用于向选定受众广播特定消息。OnConnectedAsync每当有新客户端连接到 Hub 时调用的虚拟方法。OnDisconnectedAsync每当有新客户端与 Hub 断开连接时调用的虚拟方法。最简单的 Hub 类如下所示public class ProgressHub : Hub { }有趣的是如果在 ASP.NET Core MVC 应用程序上下文中从控制器方法内使用它就会直接采用 Hub 形式。几乎所有的 ASP.NET Core SignalR 示例包括聊天示例往往都会在客户端和 Hub 之间进行直接绑定和双向绑定无需控制器提供任何形式调解。在这种情况下Hub 采用的形式将会更有形一点public class SampleChat : Hub {     // Invoked from outside the hub  public void Say(string message){// Invoke method on listening client(s)    return Clients.All.InvokeAsync(Said, message);} }与数十篇博客文章中换汤不换药的规范 SignalR 聊天示例不同本文中的示例其实并没有在客户端和服务器之间建立双向对话。虽然连接是从客户端建立的但在此之后客户端就不会发送其他任何请求。相反服务器会监视任务进度并在适当时将数据推送回客户端。也就是说只有当用例要求客户端直接调用公共方法时Hub 类才必须像上面的代码一样使用这些方法。如果有点复杂难懂下面的示例足以阐明这一点。监视远程任务它的具体情形是这样的ASP.NET Core 应用程序为用户提供了某 HTML 接口以方便用户触发可能会很漫长的远程任务如创建报告。因此作为开发人员需要显示进度栏以持续反馈进度见图 3。图 3使用 SignalR 监视远程任务的进度可以猜到在此示例中客户端和服务器都在同一个 ASP.NET Core 项目的上下文中设置 SignalR 实时会话。在此开发阶段中MVC 项目功能齐全它使用图 1 中的启动代码进行了扩展。接下来将设置客户端框架。需要在与 SignalR 终结点交互的所有 Razor或纯 HTML视图中完成此设置。若要在 Web 浏览器中与 SignalR 终结点进行通信首先要添加对 SignalR JavaScript 客户端库的引用script src~/scripts/signalr.min.js /script可以通过多种方式获取此 JavaScript 文件。最值得推荐的方法是使用几乎所有开发计算机上都有的 Node.js 包管理器 (NPM) 工具特别是在 Visual Studio 2017 版本推出后。通过 NPM查找并安装名为 aspnet/signalr 的 ASP.NET Core SignalR 客户端。它会将许多 JavaScript 文件复制到磁盘但其中只有一个文件才是大多数情况唯一需要的。不管怎样这就是简单地链接 JavaScript 文件还可以通过其他许多方式来获取此文件包括从旧版 ASP.NET Core SignalR 项目中复制它。然而NPM 是团队提供的唯一受支持的脚本获取方式。另请注意ASP.NET Core SignalR 不再依赖 jQuery。在客户端应用程序中还需要另一段更具体的 JavaScript 代码。特别是需要如下代码var progressConnection new signalR.HubConnection(/progressDemo); progressConnection.start();与 SignalR Hub 建立的连接与指定路径匹配。更确切地说以参数形式传递到 HubConnection 的名称应该是映射到启动类中路由的名称之一。在内部HubConnection 对象准备了串联当前服务器 URL 和给定名称生成的 URL 字符串。只有当此 URL 与已配置的路由之一匹配时才会处理它。另请注意如果客户端和服务器不是相同的 Web 应用程序那么必须向 HubConnection 传递托管 SignalR Hub 的 ASP.NET Core 应用程序的完整 URL外加 Hub名称。然后必须通过 start 方法打开 JavaScript Hub 连接对象。可以使用 JavaScript 承诺特别是 then 方法或 TypeScript 中的 async/await 执行后续操作如初始化某用户界面。SignalR 连接由字符串 ID 唯一标识。请务必注意如果传输连接或服务器失败ASP.NET Core SignalR 就不再支持自动重新连接。在旧版中如果发生服务器故障客户端会尝试根据计划算法重新建立连接。如果成功它会使用相同的 ID 重新打开连接。在 SignalR Core 中如果连接中断客户端只能通过 start 方法再次启动连接这就会生成连接 ID 不同的其他连接实例。客户端回调 API需要的另一段基本 JavaScript 代码是Hub 回调的 JavaScript用于刷新接口并在客户端上反映服务器上的进度。虽然这段代码在 ASP.NET Core SignalR 中的编写方式与旧版中的略有不同但意向是完全相同的。此示例中有以下三个方法能够从服务器回调initProgressBar、updateProgressBar 和 clearProgressBar。不用说可以使用任意名称和签名。以下是实现示例progressConnection.on(initProgressBar, () {setProgress(0);$(#notification).show(); }); progressConnection.on(updateProgressBar, (perc) {setProgress(perc); }); progressConnection.on(clearProgressBar, () {setProgress(100);$(#notification).hide(); });例如如果从服务器回调 initProgressBar 方法帮助程序 setProgress JavaScript 函数就会配置并显示进度栏此演示使用的是启动进度栏组件。请注意代码中使用了 jQuery 库但仅用于更新 UI。如前所述客户端 SignalR Core 库不再是 jQuery 插件。也就是说如果 UI 是基于 Angular 等可能根本无需使用 jQuery。服务器端事件缺少的解决方案部分是决定何时调用客户端函数。主要有以下两种方案。一种是在客户端通过 Web API 或控制器终结点调用服务器操作时调用。另一种是在客户端直接调用 Hub 时调用。最后只需决定在哪里为回调客户端的任务编写代码。在规范聊天示例中这一切都发生在 Hub 中执行所需的全部逻辑并将消息分派给相应连接。监视远程任务是另一回事。它假设后台正在运行某业务流程以通过某种方式通知进度。从技术角度来讲可能会在 Hub 中编码此流程并从中建立与客户端 UI 之间的对话。也可以让控制器 (API) 触发此流程Hub 仅用于将事件传递给客户端。比此示例更为实际的做法是在低于控制器级别的层中编码此流程。总而言之可以定义 Hub 类并随时可将它用于决定何时以及是否调用客户端函数。有趣的地方在于需要什么才能将 Hub 实例注入控制器或其他业务类。此演示在控制器中注入 Hub但也会对其他更深级别的类执行完全相同的操作。示例 TaskController 是通过 JavaScript 直接从客户端调用以触发进度栏将显示其进度的远程任务public class TaskController : Controller {private readonly IHubContextProgressHub _progressHubContext;public TaskController(IHubContextProgressHub progressHubContext){_progressHubContext progressHubContext;}public IActionResult Lengthy(){// Perform the task and call back  } }通过 IHubContextTHub 接口在控制器或其他任何类中注入 Hub。IHubContext 接口封装 Hub 实例但无法直接访问它。从中可以将消息分派回 UI但无法访问连接 ID举个例子。假设远程任务是在 Lengthy 方法中执行并需要在其中更新客户端进度栏progressHubContext.Clients.Client(connId).InvokeAsync(updateProgressBar, 45);连接 ID 可以从 Hub 类中进行检索但无法像此示例一样从通用 Hub 上下文中进行检索。因此最简单的方法是让客户端方法在启动远程任务时就传递连接字符串public void Lengthy([Bind(Prefixid)] string connId) { … }最后控制器类接收 SignalR 连接 ID注入有 Hub 上下文并使用通过非类型化通用 API 调用的上下文方法InvokeAsync 方法执行操作。这样一来Hub 类就无需包含任何方法如果觉得这很奇怪请参阅 bit.ly/2DWd8SV 中的代码。总结本文介绍了如何在 Web 应用程序上下文中使用 ASP.NET Core SignalR 监视远程任务。Hub 几乎是空的因为所有通知逻辑都被内置到控制器中并使用通过 DI 注入的 Hub 上下文进行编排。这只是 ASP.NET Core SignalR 漫长旅程的起点。接下来我将深入研究基础结构并探索类型化 Hub。Dino Esposito 在他 25 年的职业生涯中撰写了超过 20 本书籍和 1,000 篇文章。Esposito 不仅是舞台剧《事业中断》的作者还是 BaxEnergy 的数字策略分析师正忙于编写有助于建设环保世界的软件。可以在 Twitter 上关注他 (despos)。原文https://msdn.microsoft.com/zh-cn/magazine/mt846469.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.lebaoying.cn/news/2420.html

相关文章:

  • 百度的网站收录怎么做如何管理wordpress
  • p2p视频网站开发简易app开发软件
  • 哈尔滨网站优化对策导购类网站如何做会员互动
  • 深圳涂料网站建设哈尔滨百度网络推广
  • 门户网站建设的好处广州网站建设优化方案
  • 怎么设置网站名称玉名是什么意思
  • 百度网站优化推广青岛网站建设好不好
  • 合肥市建设工程造价信息网站wordpress 调用页面内容
  • 江苏网站关键词优化优化单页营销网站怎么做
  • 韩城市网站建设营销论坛网站建设
  • 省建设厅网站二建考试外贸网站开发 河南
  • 电子商务网站建设方案推荐wordpress天气接口
  • 海口建设公司网站哈尔滨网络科技公司做网站
  • 北京门户网站建设wordpress自定义发文章界面
  • 什么是网站建设规划书企业注册地址
  • 做网站小程序源码wordpress 4.9.5
  • 上海设计网站建设网站等比例缩放
  • 门户网站是如何盈利的外国网站怎么进入
  • 电子商务网站建设费用预算提供常州网站建设公司
  • 用wordpress开发网站模板下载wordpress设置jetpack失败
  • 百度指数有什么作用seo关键词排名优化技巧
  • 网站及新媒体建设办法旅游网站的导航栏目设计
  • 建设电子商务网站流程图织梦网站如何做地区分站
  • 电商网站首页设计温州网站开发流程
  • 网站搭建技术都有啥南充阆中网站建设
  • 黄村专业网站开发公司WordPress 收款方案
  • wordpress整站备份wordpress新浪云平台
  • 企业自建网站的优缺点东莞网站建设报价 一呼百应
  • 如何做收费会员定制网站wordpress首页生成html
  • 门户网站百度百科seo基础知识培训