在上一篇《.NET CORE 抛弃IIS,超便捷BS系统部署方案》一文中介绍了如何便捷部署BS系统,如果有朋友还不了解的,建议先看我主页的上一篇文章了解下。
既然现在我们可以脱离IIS,以windows服务方式部署BS系统了,除了让我们部署变得便捷外,还可以做哪些事呢?我们公司主要做物联网,工控项目,经常需要和硬件设备打交道。在BS系统大行其道的当下,也就经常遇到需要在服务端部署的系统内的网页中调用用户本地硬件来完成一些功能,比如调用本地的读卡器,读取会员卡芯片内容,又或者调用RFID读写器,将一些数据写入RFID电子标签。
以往.NET程序员都是写一个ActiveX控件来实现JS调用本地硬件,但这种方式最大的缺点是必须用IE,另外还有对IE进行安全设置才能使用,非常的不方便。特别是当我们目前技术栈都已经改成前后端分离,前端使用Vue,ElementUI等,对IE的兼容性都很差。我们需要抛弃IE,抛弃ActiveX,急需一种新的技术实现用户本地硬件的访问,甚至一种跨平台的本地硬件插件服务。
1、先新建一个ASP.NET CORE WEB API项目(也就是用户本地硬件服务)
新建ASP.NET Core Web API 项目
2、Nuget安装
Microsoft.Extensions.Hosting.WindowsServices
3、配置windows服务部署支持,并设置我们的web服务插件监听端口默认为:56666
4、配置支持跨域访问(重点),只有配置了跨域访问,我们的BS系统的网页才能通过JS顺利调用本插件服务的webapi
跨域访问支持
5、添加一个测试用的webapi,这里只是在接口里面直接返回两组字符串,实际项目中可以做一些与硬件通信的操作,本文主要讲的是如何在我们的网页上通过JS调用本插件服务的webapi。
6、发布服务(注意如图的发布参数),并安装服务到用户本地(安装方式参考前一篇博文)
7、编写一个测试用的html页,并将该页面放到我们的云服务器的一个站点下
知擎物联设备服务插件测试
<script type="text/javascript" src="jquery.min.js"></script>
知擎物联设备服务插件测试
<script type="text/javascript">
$(document).ready(function () {
$("button").click(function () {
$.ajax({
url: "http://localhost:56666/api/1000", success: function (result) {
$("#div1").html(result);
}
});
});
});
</script>
8、浏览器访问之前放置在云服务器站点上的网页,点击测试网页上的按钮,发起ajax请求到本地的web服务接口(
http://localhost:56666/api/1000),顺利得到接口的返回值。
欢迎大家交流评论,共同进步,有任何建议或问题随时私聊我
如果本文对您有帮助,请关注,点赞,这是对我继续分享技术最好的鼓励。
有需要本文DEMO的,私聊关键字:JS调用本地硬件