【云原生】设备云之云服务器的配置与使用

news2024/10/6 12:32:59

文章目录

  • 一、配置云服务
    • 1、创建连接设备
    • 2、配置云服务参数
    • 3、调试云服务
  • 二、云服务的使用
    • 1、发布主题
    • 2、实时数据
    • 3、发布状态或信息
    • 4、发布的信息列表
    • 5、发布的主题列表
    • 6、订阅主题
    • 7、Topiclist
    • 8、Pause
    • 9、MDataPubCycle

一、配置云服务

1、创建连接设备

在 FlexManager 的“远程下载–>设备管理—>网络 PLC”中创建 MQTT 连接设备,如图设置:
在这里插入图片描述

在此处添加的设备中,IP 地址和端口是忽略的,在下一步配置云服务中设置 IP 地址(服务地址) 和端口号。

2、配置云服务参数

在“远程下载–>设备管理–>云服务”中配置 MQTT 推送的服务器地址、端口号、设备 ID、登录用户名与密码等信息。
在这里插入图片描述

云服务:繁易 MQTT,指定的 MQTT 服务协议

Keep alive:心跳包时间,单位:s

服务地址:MQTT 推送的服务器地址

设备ID:用于指定盒子的设备 ID(比如盒子序列号,或者用户自定义的 ID)

加密:启用加密,支持盒子与 MQTT 服务器使用 TLS(SSL)进行通讯

离线缓存方式:允许在 MQTT 离线的状态下,将推送的消息缓存到 SD 卡或 U 盘,如果不需要缓存,选择“无”

客户端证书:若启用了 TLS 加密,方可启用客户端证书。该证书为盒子使用

服务器证书: 若启用了 TLS 加密,方可启用服务器证书。该证书为 MQTT 服务器所使用的证书。若盒子需要双向加密,可启用该项,否则不需要启用

主题:支持自定义主题前缀,若不自定义,则默认使用这个前缀:Topic/flexem/fbox/。

​ 以盒子序列号 222218030xxx 为例,重启的主题为:Topic/flexem/fbox/222218030xxx/system/Reboot, 若自定义的前缀为:office/room1/,则重启

​ 的主题为:office/room1/222218030xxx/system/Reboot

注意:自定义主题必须以“/”结尾,若自定义主题前有/,则订阅主题是也要加上对应的/。

用户验证:是盒子登录 MQTT 服务器所需要的用户信息验证

同步报警、同步监控点:若是首次使用 MQTT 服务,添加监控点或报警条目后,需要点击“同步报警”或者“同步监控点”才能使添加的条目推送 MQTT 生效;若不是首次需要点击“同步报警” 或者“同步监控点”后,再重启设备才能使添加的条目推送 MQTT 生效。如果不使用报警,可以不进行同步报警。

注意:
FBox在使用MQTT来推送数据时,需要在报警记录内引用一个mqtt地址的任意一点变量,(例如mqtt-connect)。设置完报警条目之后需要在云服务配置窗口点击同步报警点。
如下图所示:
在这里插入图片描述

3、调试云服务

验证 MQTT 服务器与客户端是否连通,在数据监控中添加地址类型为“mqtt_connect”的监控点,数值为 1 时,就代表连通,如果值为 0,代表没有连通,需要去检查前两个步骤的配置是否有错误。
在这里插入图片描述
在这里插入图片描述

二、云服务的使用

主题的订阅与发布,MQTT 服务端与盒子客户端连通后,现以 MQTT 网页客户端为例,登录 MQTT 网页客户端,可以

进行订阅和发布主题。在 MQTT 客户端可以查看设备的主题 Topic 列表,FLEXEM MQTT 的主题

(以下简称 Topic)均以 json 格式传输。查看设备的主题列表如图:
在这里插入图片描述

已经订阅的主题,都会在这个地方展示出来。

在 MQTT客户端“Websocket”菜单中进行订阅、发布主题。注意填写内容大小写。
在这里插入图片描述

1、发布主题

在 MQTT客户端的订阅处填写这些主题,就会接收到盒子发布的相应的信息。(以盒子

22221803XXXX为例,且主题没有自定义,默认是:Topic/flexem/fbox/)

2、实时数据

该主题是盒子主动发布的主题,根据默认的发布周期(10s)进行发布,在 MQTT客户端订阅。

此主题可以接收到盒子条目的推送。

例:盒子中有监控点,在 MQTT客户端订阅该主题,会接收到盒子中推送的监控点内容:

主题 Topic/flexem/fbox/{盒子序列号}/system/MonitorData (例:Topic/flexem/fbox/22221803xxx/system/MonitorData)
类型 发布
内容 {“time”:“2018-4-26 17:33:16”,“data”:[{“name”:“Temp”,“value”,“124”},{“name”:“mqtt_connect”,“value”,“1”},{“name”:“bit”,“value”,“0”}] }
“Time”:条目监控点推送时间

“name”:监控点名称

“value”:监控点的值

注意:一个 MQTT报文最大的监控点数量是 50个,当需要上传的监控点数量超过 50之后,盒子

​ 会分成多个报文推送。分开发送的这几个报文的时间戳是相同的,可以根据这个来组包。

在盒子客户端(FlexManager)中可以查看盒子中添加的监控点:
在这里插入图片描述
在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MonitorData,点击

“Subscribe”,MQTT客户端订阅的主题会展示在右侧列表中,接收到的信息在右下方的“Messages

received”列表中,按默认的发布周期接收信息。
在这里插入图片描述
如果要取消订阅该主题,在订阅的主题列表中取消该主题就行了。
在这里插入图片描述

3、发布状态或信息

当盒子收到一些获取相关信息或状态主题时,则需要以该主题进行发布。 MQTT客户端订阅该主题后,就会获取盒子的相关信息。

主题 Topic/flexem/fbox/222218030xxx/system/Status
类型 发布
内容 {状态类型:状态值}
状态:Pause {“Pause”:“Enable”} 或者{“Pause”:“Disable”} 是否处于暂停
状态:MDataPubCycle {“MDataPubCycle”:10} 监控点发布周期值
注意:盒子不会主动发布该主题,当盒子收到主题为Topic/flexem/fbox/222218030xxx/system/GetInfo, 内容为 Pause 或者 MDataPubCycle 时,才会发布盒子相关状态或信息,MQTT 客户端订阅该主题会收到相应的信息。

在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/Status,点击“Subscribe”订阅该主题。在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/GetInfo,在“Messages–>Messages”填写点的内容“Pause”,会获取盒子是否处于暂停推送条目状态,填写内容“MDataPubCycle”,会获取盒子监控点发布周期值。
在这里插入图片描述
在这里插入图片描述

4、发布的信息列表

在 MQTT客户端订阅该主题后,就会获取盒子中的监控点信息。

主题 Topic/flexem/fbox/222218030xxx/system/Taglist
类型 发布
内容 {“Version”:1,“list”:[{“name”:“Temp”},{“name”:“mqtt_connect”},{“name”:“bit”},{“name”:“single”} ] }
注意:盒子不会主动发布该主题,当盒子收到获取盒子信息主题为Topic/flexem/fbox/222218030xxx/system/GetInfo 并且内容为 Taglist时,表示要获取盒子的条目信息列表,这时盒子才会以 Topic/flexem/fbox/222218030009/system/Taglist 进行发布。

在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/Taglist,点击“Subscribe”订阅该主题。在“Messages–>Topic”填写发布主题:Topic/flexem/fbox/222218030xxx/system/GetInfo,在“Messages–>Messages”填写点的内容“Taglist”,会获取盒子中所有的监控点条目。
在这里插入图片描述

5、发布的主题列表

主题列表为系统默认主题,在 MQTT客户端订阅该主题后,可以获取该设备支持的主题列表。其

中 sub表示该主题是盒子订阅的主题,pub表示盒子可发布的主题。

主题 Topic/flexem/fbox/222218030xxx/system/Topiclist
类型 发布
内容 {“topicVer”: 1,“topicList”:[{“topicname”: “WriteData”,“type”: “sub”},{“topicname”: “GetInfo”,“type”: “sub”},{“topicname”: “Reboot”,“type”: “sub”},{“topicname”: “Pause”,“type”: “sub”},{“topicname”: “MDataPubCycle”,“type”: “sub”},{“topicname”: “MonitorData”,“type”: “pub”},{“topicname": “Status”,“type”: “pub”}{“topicname”: “Taglist”,“type”: “pub”}{topicname":“Topiclist”,“type”: “pub”} ]}
“topicVer”:主题版本号.

“topicList”:设备支持的主题列表,sub表示该主题是盒子订阅的主题,pub表示盒子可发布的主题,所有主题的前缀都是默认的

​ Topic/flexem/fbox/222218030xxx/system/。因此只需要回复最后一级即可。

注意:盒子不会主动发布该主题,同理,当盒子收到获取盒子信息主题 Topic/flexem/fbox/222218030xxx/system/GetInfo

​ 并且内容为 Topiclist时,表示要获取盒子的条目信息列表,这时盒子才会以Topic/flexem/fbox/222218030xxx/system/Topiclist进行发布。

在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/Topiclist,点击“Subscribe”订阅该主题。在“Messages–>Topic”填写发布主题:Topic/flexem/fbox/222218030xxx/system/GetInfo,在“Messages–>Messages”填写点的内容“Topiclist”,会获取设备持支的主题列表。
在这里插入图片描述

6、订阅主题

以下几个主题为盒子订阅主题,在 MQTT客户端的发布主题处填写这些主题,盒子才可以订阅接收到这些信息。(以盒子 222218030xxx为例,且主题没有自定义,默认是:Topic/flexem/fbox/)

6.2.1设置监控点
设置监控点会控制盒子进行监控点的写入操作,目前 FLEXEM MQTT的写入操作只支持一次写入

一条变量值。例:盒子中有名称为“Temp”的监控点,在 MQTT客户端修改其值为 30。

主题 Topic/flexem/fbox/222218030xxx/system/WriteData
类型 订阅
内容 {“Version”:10,“Data”:[{“name”:“Temp”,“value”:“30”}]}
“Version”:10:主题的版本号.

“name”: 需要修改的监控点名称.

“value”: 需要修改监控点的值.

在“ Messages–>Topic”填写主题: Topic/flexem/fbox/222218030xxx/system/WriteData ,在“Messages–>Messages”填写修改监控点的内容,点击发送“send”,盒子收到该主题后,并进行写值操作。
在这里插入图片描述
注意:在登记条目的时候,切勿使用相同 name的条目MQTT不支持字符串条目

6.2.2暂停数据推送
服务器可以暂停 MQTT的实时数据的发布。也可以通过此主题打开取消暂停实时数据的发布。

主题 Topic/flexem/fbox/222218030xxx/system/Pause
类型 订阅
内容 "Enable"或者 “Disable”
“Enable”:表示暂停当前所有实时数据的发布。

“Disable”:表示取消暂停,实时数据继续发布。

在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/Pause,在“Messages–>Messages”中填写"Enable"或者 “Disable”,盒子接收到主题,根据内容会“暂停”或者“取消暂停”监控条目的推送。

以暂停推送条目为例:
在这里插入图片描述
注意:不支持对单个条目的暂停推送

6.2.3重启盒子
盒子收到该主题后,会立即进行重启,此时 MQTT服务器应主动断开现有链接,释放已经订阅的主题。盒子重启登录后,会重新注册设备,获取列表等。

主题 Topic/flexem/fbox/222218030xxx/system/Reboot
类型 订阅
内容 “True”(内容可以为空)
在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/Reboot,在“Messages–>Messages”中填写“True”(可以为空),盒子收到该命令后,会立即进行重启。
在这里插入图片描述
注意:如果 MQTT客户端多次发布该主题,则在盒子再次登录的时候,MQTT服务器仍会再继续发送没有传输完成的报文。

比如:MQTT客户端连续发送了 10次重启命令。盒子收到一次重启命令后,立即重启,此时 MQTT服务器仍记录还有 9次重启命令未传达,在下次盒子启动后,MQTT将继续发送。

6.2.4立即让盒子发布监控点
盒子收到该主题后,则立即发布 Topic/flexem/fbox/222218030xxx/system/MonitorData主题,内容为当前要采集的条目的值.

主题 Topic/flexem/fbox/222218030xxx/system/MDataPubNow
类型 订阅
内容 任意内容,可以为空
如果设置的监控条目周期比较长,但又想立即获取监控条目,客户端可发布该主题,当 FBox收到该主题后,会以

Topic/flexem/fbox/222218030xxx/system/MonitorData主题进行发布监控条目。先在“Subscribe–>Topic”填写主题:

Topic/flexem/fbox/222218030xxx/system/MonitorData,获取盒子的监控点,便于观察修改发布周期后监控点的发送。

在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MDataPubNow,点击发送,就可以立即得到盒子监控点数据。
在这里插入图片描述
6.2.5 设置监控点条目发布周期
​ 允许通过主题交互形式设置监控点的发布周期。

主题 Topic/flexem/fbox/222218030xxx/system/MDataPubCycle
类型 订阅
内容 5
先在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MonitorData,获取盒子的监控点,便于观察修改发布周期后监控点的发送。

在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MDataPubCycle,在“Messages–>Messages”中填写“5”(修改的发布周期,单位:S),盒子收到该命令后,就会立即修改监控点的发布周期。
在这里插入图片描述
6.2.6 设置单个或多个监控点条目发布周期
在 MQTT客户端发布该主题,设置的单个或多个监控点就会按照设置的发布周期进行发布,如果没有使用该主题设置过的监控条目周期,会使用默认周期或者使用 MDataPubCycle设置的周期。当设置为 0时,监控条目使用全局的发布周期。

主题 Topic/flexem/fbox/222218030xxx/system/MDPCS
类型 订阅
内容 {“cycle”:10,“num”:3,“item”:[“ItemName1”,“ItemName2”,“ItemName3”] }
“cycle”: 修改的发布周期时间,单位:s 。

“num”: 设置修改的监控点的数量。

“item”: 监控点条目的名称。

先在“Subscribe–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MonitorData,获取盒子的监控点,便于观察修改发布周期后监控点的发送。

在“Messages–>Topic”填写主题:Topic/flexem/fbox/222218030xxx/system/MDPCS,在“Messages–>Messages”中填写对应的内容,盒子接收到该主题后,会改变设置的监控点的推送周期。
在这里插入图片描述
6.2.7 获取盒子相关状态或信息
当盒子收到不同的获取信息后,以指定的主题发布。这个主题在前文中均有用到。

主题 Topic/flexem/fbox/222218030xxx/system/GetInfo
类型 订阅
Taglist 获取当前条目列表
Topiclist 获取当前盒子的主题(订阅和可发布)
Pause 获取当前盒子的暂停状态(是否处于暂停)
MDataPubCycle 获取当前盒子监控条目的推送周期

  1. Taglist :Topic/flexem/fbox/300216080xxx1/system/GetInfo Taglis

当盒子收到该主题和内容后,则发布 Topic/flexem/fbox/222218030xxx/system/Taglist主题,内容为:

{

"Version":1,

"list":[{"name":"Temp"},

{"name":"mqtt_connect"},

{"name":"bit"},

{"name":"single"}]

}

在这里插入图片描述

7、Topiclist

Topiclist获取当前盒子的主题:

Topic/flexem/fbox/300216080xxx1/system/GetInfo Topiclist

当盒子收到该主题和内容后,则发布 Topic/flexem/fbox/222218030xxx/system/Topiclist主题,内容为

{"topicVer": 1,

"topicList": [

{"topicname": "WriteData","type": "sub"},

{"topicname": "GetInfo","type": "sub"},

{"topicname": "Reboot","type": "sub"},

{"topicname": "Pause","type": "sub"},

{"topicname": "MDataPubCycle","type": "sub"},

{"topicname": "MonitorData","type": "pub"},

{"topicname": "Status","type": "pub"},

{"topicname": "Taglist","type": "pub"},

{"topicname": "Topiclist","type": "pub"},

]}

所有主题的前缀都是默认的 Topic/flexem/fbox/222218030xxx/system/,因此只需要回复最后一级即

可。
在这里插入图片描述

8、Pause

Pause获取当前盒子的暂停状态:

Topic/flexem/fbox/222218030xxx/system/GetInfo Pause

当盒子收到该主题及内容时,则发布 Topic/flexem/fbox/222218030xxx/system/Status主题,内容为{“Pause”:“Enable”}或者{“Pause”:“Disable”}
在这里插入图片描述

9、MDataPubCycle

MDataPubCycle获取当前盒子监控条目的推送周期:

Topic/flexem/fbox/222218030xxx/system/GetInfo MDataPubCycle

当盒子收到该主题及内容时,则发布 Topic/flexem/fbox/222218030xxx/system/Status主题,内容为:{"MDataPubCycle ":10}
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式(在API文档中搜索类Pattern,可以看到正则表达式的规则)

正则表达式(在API文档中搜索类Pattern,可以看到正则表达式的规则) String.matches(”正则表达式”) 该方法会判断String是否满足括号内的正则表达式,如果满足,则返回true 正则表达式的作用: 校验字符串是…

PHP韩语学习网站用wamp、phpstudy运行定制开发mysql数据库BS模式

一、源码特点 PHP韩语学习网站是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库系统主要采用B/S模式开发,开发环境为PHP APACHE,数据库为mysql5.0,使用php语言开发 php网页源码韩语学习网站…

[Spring Cloud] Open Feign---扩展

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

[附源码]java毕业设计汽车租赁管理系统-

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Prometheus系列(二)Grafana可视化部署

概念 Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测工具,它可以大大帮助我们简化监控的复杂度,我们只需要提供需要监控的数据,它就可以帮助生成各种可视化仪表,同时它还有报警功能&#…

【数据结构】线性表 _顺序表 链表的增删查改 _[细节分析+代码实现]

快速导航 1.线性表 2.顺序表 2.1 概念及结构 2.2 静态结构和动态结构的比较 2.3 接口实现(重点) 2.3.1 SeqList(初始化) &SeqListPrint(依次打印表中数据) 2.3.2 SeqListPushBack(尾插) 2.3.3 SeqListPushFront(头插) 2.3.4 SeqListPopBack(尾删) & SeqListPopFront(头…

C语言小游戏之扫雷(万字详解)

hello,大家好,今天我们继续为大家带来一个小游戏,扫雷。相信这个游戏又是很多人的童年,那么我们今天就来实现一下这个扫雷游戏。 目录 一、游戏简介 二、游戏的基本设计 1.游戏基本思路 2.游戏基本框架 3.如何设计布置雷与排查…

蓝牙耳机什么牌子好?口碑最好的蓝牙耳机品牌排行

在现代除了手机或智能手机,人们生活中离不开的另一件事就是“耳机”,尤其是对于心中有音乐的人。那么市面上的蓝牙耳机五花八门,尤其是陆续上新的新品,哪个牌子更好呢?以下是笔者整理的几款口碑好的蓝牙耳机&#xff0…

欧拉角与旋转矩阵

目录1. 欧拉角1.1欧拉角的表示1.2内旋和外旋1.3 欧拉角的缺点2 欧拉角到旋转矩阵的表示3 值得注意的点4. 非常感谢您的阅读!1. 欧拉角 1.1欧拉角的表示 我们想描述刚体在现实世界的旋转时&…

chromedriver依赖安装失败 解决办法

1.问题描述 在使用npm下载chromedriver依赖时报错: chromedriver2.27.2 install: node install.js2.解决办法 第一步:根据报错信息中的地址,手动下载 chromedriver 依赖。 https://cdn.npmmirror.com/binaries/chromedriver/2.27/chromedr…

VOLTE呼叫流程介绍

VOLTE呼叫流程介绍: A和B均在IDLE模式,A用户(主叫Caller)呼叫B用户(被叫Callee)流程图; A、B均在MME附着,已在AS服务器注册; VOLTE呼叫业务流程 VOLTE呼叫业务流程 VOL…

[附源码]java毕业设计天悦酒店管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

java高级篇 Mybatis-Plus

目录 一、Mybatis-Plus概述 二、特性 三、快速搭建Mybatis-Plus框架 3.1 创建数据库以及表结构和数据 3.2 创建一个springboot工程并引入相关的依赖 3.3 修改配置文件 3.4 创建实体类 3.5 创建dao接口 3.6 为dao接口生成带来实现类 3.7 测试 四、使用mp完成crud操作 4.1 添加…

Linux 基础IO

目录 一、复习C文件IO相关操作 示例代码 fopen的打开模式 C标准库默认打开的三个输入输出流 理解当前路径 二、认识文件相关系统调用接口 示例代码 open函数简介 三、文件描述符 初步认识... 文件描述符的本质: 三个默认打开的文件 文件描述符的分配规则…

SSH客户端工具MobaXterm

前言 SSH客户端远程连接服务器的有xshell(xmanager套件下),需要收费,也可以通过一些和谐的方式使用。 但是有时候,我们需要使用光明正大的软件SSH到远程服务器,MobaXterm家庭版可以正常的使用。 其他产品: SecureCRT&…

任意代码执行漏洞复现

漏洞简介 在 PostgreSQL 数据库的 jdbc 驱动程序中发现一个安全漏洞。当攻击者控制 jdbc url 或者属性时,使用 PostgreSQL 数据库的系统将受到攻击。 pgjdbc 根据通过 authenticationPluginClassName、sslhostnameverifier、socketFactory 、sslfactory、sslpasswo…

021_SSSS_Diffusion Models Already Have a Semantic Latent Space

Diffusion Models Already Have a Semantic Latent Space 1. Introduction 本文指出,现有的Diffusion模型可以在不同的领域有出色的表现,但是缺少可以控制其生成过程的语义隐空间(Semantic Latent Sapce)。本文提出了非对称的反…

C++模拟OpenGL库——图片处理及纹理系统(三):图片缩放操作:简单插值二次线性插值

目录 简单插值 二次线性插值 简单插值 如图,我们想把一张小图缩放成一张大图,自然的想法就是按照它们的长宽比例进行缩放(zoomX)。 但是问题也显而易见,在缩放的过程中,小图的像素并不能一一映射到大图的…

蜂巢能源冲刺科创板上市:拟募资150亿元,上半年收入37亿元

11月18日,蜂巢能源科技股份有限公司(下称“蜂巢能源”)在上海证券交易所递交招股书,准备在科创板上市。本次冲刺科创板上市,蜂巢能源计划募资150亿元,主要用于动力锂离子电池项目、研发中心建设项目等。 据…

Unity游戏Mod/插件制作教程02 - 开发环境准备

前言 虽然本教程的目标读者是有C#基础的玩家,但是作为流程,基础的开发软件部分我还是要记录一下。 安装VisualStudio VisualStudio是我们开发插件最重要的工具,也许你习惯其他开发.net的工具,但是免费的VisualStudio已经足够好用…