(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{7582:function(t,s,e){t.exports=e.p+"assets/img/ziyuanxiazai.accf54ac.png"},7583:function(t,s,e){t.exports=e.p+"assets/img/zhucema.d771fa13.png"},7584:function(t,s,e){t.exports=e.p+"assets/img/zhucema1.3fa42d57.png"},7585:function(t,s,e){t.exports=e.p+"assets/img/gognnengshiyong.5bfad735.png"},7586:function(t,s,e){t.exports=e.p+"assets/img/mimacuowu.62357afd.png"},7587:function(t,s,e){t.exports=e.p+"assets/img/jiemianwenti.b32170e5.png"},7588:function(t,s,e){t.exports=e.p+"assets/img/glymmwj.f8198cd3.png"},7589:function(t,s,e){t.exports=e.p+"assets/img/ywgj.9687aa43.png"},7590:function(t,s,e){t.exports=e.p+"assets/img/czglymm.cc1c0fc2.png"},7591:function(t,s,e){t.exports=e.p+"assets/img/3dlianjie.1c6ace37.png"},7592:function(t,s,e){t.exports=e.p+"assets/img/changjingliandong.67f13a84.png"},7593:function(t,s,e){t.exports=e.p+"assets/img/gdbjcj.58652058.png"},7594:function(t,s,e){t.exports=e.p+"assets/img/pzbjcj.2b83b15a.png"},7595:function(t,s,e){t.exports=e.p+"assets/img/gdcedianpz.2eeae8ed.png"},7596:function(t,s,e){t.exports=e.p+"assets/img/beixiangpeizhi.21dbc5a1.png"},7597:function(t,s,e){t.exports=e.p+"assets/img/kzcjpz.510c92bb.png"},7598:function(t,s,e){t.exports=e.p+"assets/img/yycj1.d1cfb4c9.png"},7599:function(t,s,e){t.exports=e.p+"assets/img/yycj2.5e823932.png"},7600:function(t,s,e){t.exports=e.p+"assets/img/qdyfcu.303e712d.png"},8646:function(t,s,e){"use strict";e.r(s);var a=e(7),v=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"常见问题"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#常见问题"}},[t._v("#")]),t._v(" 常见问题")]),t._v(" "),s("CopyCodeComponent"),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("提示")]),t._v(" "),s("p",[t._v("更多问题可以通过敢为云官网(https://www.ganweicloud.com/)的工单系统或者论坛进行提问，敢为云将第一时间进行回复。")])]),t._v(" "),s("h2",{attrs:{id:"安装部署"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装部署"}},[t._v("#")]),t._v(" 安装部署")]),t._v(" "),s("details",{staticClass:"custom-block details",attrs:{open:""}},[s("summary",[t._v("常见问题")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 敢为云中购买了线下部署，如何获取授权文件？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 获取授权文件步骤如下：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("注册登录敢为云官网后在"),s("a",{attrs:{href:"https://www.ganweicloud.com/Download",target:"_blank",rel:"noopener noreferrer"}},[t._v("资源下载"),s("OutboundLink")],1),t._v("页面中下载需要的IoTCenter。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7582),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("参考"),s("RouterLink",{attrs:{to:"/intro/2认识IoTCenter/2.2安装部署/软件包安装/"}},[t._v("软件包安装")]),t._v("的相关内容安装IoTCenter。")],1)]),t._v(" "),s("li",[s("p",[t._v("运行\\IoTCenter\\bin目录下的"),s("code",[t._v("GWHost1.exe")]),t._v(" 在打开的窗口中获取注册码")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7583),alt:""}})]),t._v(" "),s("p",[t._v("或者启动服务后在\\IoTCenter\\log目录下的"),s("code",[t._v("Error.txt")]),t._v("文件中查看。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7584),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("完成线下部署的订单后，敢为云的工作人员会主动与您进行联系，此时将注册码提供给敢为云的工作人员后，会将授权文件发动到您的邮箱中。")])])]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 敢为云如何进行线上部署？实名认证以及开发者认证和相关功能如何使用？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 敢为云官网的帮助中心中有详细的步骤流程，注册登录"),s("a",{attrs:{href:"https://www.ganweicloud.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("敢为云官网"),s("OutboundLink")],1),t._v("后,可以查看帮助中心对应的内容。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7585),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 购买了敢为云云服务后，登录平台的账号密码是什么？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 无论是线上部署还是线下部署，敢为云都提供了默认账号，请联系相关人员获取。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 线下部署IoTCenter登录时报错密码错误。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 在确认账号密码输入正确的情况下，出现密码错误的原因是GWUser表中的数据没有正确加密导致。修改"),s("code",[t._v("\\IoTCenter\\IoTCenterWeb\\publish")]),t._v("目录下的"),s("code",[t._v("appsettings.json")]),t._v("文件中的"),s("code",[t._v("IsAesUpdateSuccess")]),t._v("字段的值为"),s("code",[t._v("false")]),t._v("，系统会自动对"),s("code",[t._v("GWUser")]),t._v("表中的数据进行加密。如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7586),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 线下部署的IoTCenter，登录Web后菜单中只有配置管理如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7587),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 此问题是由于数据库配置不正确引起的。请打开"),s("code",[t._v("\\IoTCenter\\Data\\AlarmCenter")]),t._v("目录下的"),s("code",[t._v("AlarmCenterProperties.xml")]),t._v("文件，检查该文件中数据库配置是否正确，是否同时选择了MySql和Sqlite数据库。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 修改的管理员密码忘记了，应该如何重置。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7588),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 使用平台维护工具"),s("code",[t._v("GWEncrypt.dll")]),t._v("进行管理员密码重置。该工具位于"),s("code",[t._v("\\IoTCenter\\bin")]),t._v("目录下，使用dotnet命令执行"),s("code",[t._v("WEncrypt.dll")]),t._v("。示例如下：")]),t._v(" "),s("div",{staticClass:"language-cs extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cs"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("opt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("ganwei"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("iotcenter"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("dotnet"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("dotnet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("opt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("ganwei"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("iotcenter"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("bin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("GWEncrypt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dll\n")])])]),s("p",[t._v("Windows环境中可以直接运行"),s("code",[t._v("\\IoTCenter\\bin")]),t._v("目录下的"),s("code",[t._v("GWEncrypt.exe")]),t._v("。")]),t._v(" "),s("p",[t._v("打开的平台维护工具如下图：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7589),alt:""}})]),t._v(" "),s("p",[t._v("输入8，选择初始化维护密码，输入新的密码后回车既可完成管理员密码的重置。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7590),alt:""}})])]),t._v(" "),s("h2",{attrs:{id:"平台功能"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#平台功能"}},[t._v("#")]),t._v(" 平台功能")]),t._v(" "),s("details",{staticClass:"custom-block details",attrs:{open:""}},[s("summary",[t._v("常见问题")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 三维平台可以连接本地服务器，确无法连接远程服务器。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 此问题是由于"),s("code",[t._v("\\IoTCenter\\data\\AlarmCenter")]),t._v("目录下的"),s("code",[t._v("AlarmCenterProperties.xml")]),t._v("配置文件中没有配置全网监听导致。将上述文件中"),s("code",[t._v("HostIpAddr")]),t._v("字段的"),s("code",[t._v("Value")]),t._v("值配置为"),s("code",[t._v("0.0.0.0")]),t._v("，以开启全网监听，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7591),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 在使用Web可视化的折线图控件时，控件绑定了设备测点后只有一个数据点，而没有随着时间变化产生折线。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 检查控件绑定的测点的实时值是否发生了变化，若测点值没有发生变化则折线图控件只会显示一个数据点而不会产生折线。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 三维可视化中的环形图控件在使用json格式数据源时，控件不显示数据。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" Json数据应严格按照控件Json数据示例中的格式给出。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 场景联动功能无法正常使用。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 场景联动功能需要场景联动扩展插件的支持，可以在应用商店中安装场景联动扩展插件，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7592),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 设备测点发生告警时，没有产生工单。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 此问题的解决步骤如下：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("从应用商店中安装工单报警插件。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7593),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("配置工单报警插件，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7594),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("设备测点的"),s("strong",[t._v("工单报警")]),t._v("字段应选择"),s("strong",[t._v("是")]),t._v("。")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7595),alt:""}})])])]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 使用视频平台录像功能时，点击停止录像后在回放列表中依然显示正在录制，且录像回访播放不了。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 造成上述情况的原因有如下三种：")]),t._v(" "),s("ol",[s("li",[s("p",[s("code",[t._v("\\IoTCenter\\IoTCenterWeb\\publish")]),t._v("目录下的"),s("code",[t._v("appsetting.json")]),t._v("文件没有配置http端口 该端口一般为44381；")])]),t._v(" "),s("li",[s("p",[t._v("流媒体服务(MediaServer)目录下的config.ini文件中关于ffmpeg可执行程序(ffmpeg.exe)的路径配置有误；")])]),t._v(" "),s("li",[s("p",[t._v("流媒体服务(MediaServer)的存放路径中不能有中文")])])]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 正确配置北向应用的消息订阅功能后没有主动推送数据。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 北向转发规则引擎中配置过滤规则时，最小值不能填入0，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7596),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" Web可视化里图片上传后的保存路径是什么？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" Web可视化中上传的图片存放在"),s("code",[t._v("\\IoTCenterWeb\\publish\\wwwroot\\IoTVisualFiles\\IoTVisualImage")]),t._v("目录下。也可以采用在图片控件中添加一张上传图片，通过查看图片路径来了解上传图片的保存路径。值得注意的是图片控件的图片路径属性中保存的是相对路径，其相对的是"),s("code",[t._v("wwwroot")]),t._v("目录。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 应用商店中的的协议插件、业务插件以及物模型，三者有何区别？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 三者的区别如下：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("协议插件主要面向的是与南向设备对接的一些协议插件，实现了与设备连接，数据解析，设备控制等逻辑。安装协议插件后在添加产品时可以在驱动文件中选择该插件。")])]),t._v(" "),s("li",[s("p",[t._v("业务插件包括了扩展插件和应用插件。应用插件主要是业务流程中的一些应用模块，如工单管理，访客管理，这一类插件的共同特色是都有管理界面实现流程；扩展插件用于扩展业务流程中的功能，以适应复杂的业务场景，如定时抄表、平台级联等等都需要用到扩展插件。")])]),t._v(" "),s("li",[s("p",[t._v("物模型主要是对一类设备进行抽象建模，将设备对象抽象成数字对象，如设备中存在一些测量类和信号类数据，这些进行抽象建模后，可以将测量类和信号类分别建立模型属性，在协议解析时，按照此模型进行解析映射，实现设备属性数字化接入到平台中。安装物模型后会在产品列表中增加对应的产品。")])])])]),t._v(" "),s("h2",{attrs:{id:"开发问题"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开发问题"}},[t._v("#")]),t._v(" 开发问题")]),t._v(" "),s("details",{staticClass:"custom-block details",attrs:{open:""}},[s("summary",[t._v("常见问题")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 使用自行开发的协议插件接入设备后，设备在设备列表一直显示离线状态。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 此问题一般是因为CEquip类中的逻辑错误导致，请检查CEquip类中的代码是否有逻辑错误，比如GetYC方法中Switch结构是否缺少了某些分支等。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 协议插件开发时，init方法中使用到的Local_addr字段的含义是什么？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" Local_Addr字段对应的是通讯端口字段。如果远端设备为客户端，IoTCenter为服务端，使用通讯端口作为本机与远端通信的端口。例如为当前主机IP加端口号，如127.0.0.1:2206，则表示协议插件内部需要创建该Tcp的服务端，客户端直接连接到此服务端。同时，通讯端口也定义了本机在运行协议插件时的线程分组标识，相同的通讯端口，将使用同一个线程来运行协议插件。更多的字段含义可以参考"),s("RouterLink",{attrs:{to:"/intro/7附录/7.4数据库说明/"}},[t._v("数据库说明")]),t._v("以及"),s("RouterLink",{attrs:{to:"/intro/2认识IoTCenter/2.3基础功能使用指南/2.3.4设备管理/"}},[t._v("设备管理")]),t._v("部分的内容。")],1),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 使用自行开发的协议插件接入设备后，配置了测点保存历史曲线，但无法查询到历史曲线。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 此问题一般是由于"),s("code",[t._v("SetYCData(YcpTableRow r, object o)")]),t._v("方法中的参数o的数据类型不是数值类型导致，请确保在调用"),s("code",[t._v("SetYCData(YcpTableRow r, object o)")]),t._v("方法时参数o的数据类型为数值类型，不能是非数值类型，也可以调用"),s("code",[t._v("SetYcpTableRowData(YcpTableRow r, double o)")]),t._v("方法。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 在开发协议插件过程中需要查询字符串类型测点的历史数据，该如何实现？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 使用"),s("code",[t._v("GWDataCenter.DataCenter.GetStringInfoFromCurveAsync")]),t._v("方法可以读取字符串类型历史数据，该方法使用示例如下：")]),t._v(" "),s("div",{staticClass:"language-cs extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cs"}},[s("code",[t._v("GWDataCenter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DataCenter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("GetStringInfoFromCurveAsync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("DateTime"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Now"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("AddHours")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" DateTime"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Now"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("AddMinutes")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11135")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"CS"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v('其中前两个参数分别为查询历史数据的起始时间和结束时间，第3个参数为站点号(默认为1),第4个参数为设备号，第五个参数为测点号，最后一个参数为历史数据的类型分为数值遥测、数值遥信、字符串遥测、字符串遥信以及元组类型对应的参数值为"C"、"X"、"CS"、"XS"、"SEQ"。')]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 使用自行开发的协议插件接入设备后，设备列表界面遥测点的值一直是*号，调试时断点不能进入GetYC()方法。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 造成这种情况的原因有以下两种：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("在init方法中没有调用父类的"),s("code",[t._v("init()")]),t._v("方法，请检查init方法中是否有bae.init()语句。")])]),t._v(" "),s("li",[s("p",[t._v("init方法中存在死循环。")])])]),t._v(" "),s("p",[t._v("请核对CEquip类中是否存在上述两种情况。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 协议插件开发时"),s("code",[t._v("init")]),t._v("方法不执行，调试时不能进入该方法。")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 协议插件的类名必须为"),s("code",[t._v("CEquip")]),t._v("，检查插件中的类名是否为"),s("code",[t._v("CEquip")]),t._v("。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 开发完成的扩展插件应如何使用？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 扩展插件的使用步骤如下：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("配置扩展插件，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7597),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("将扩展插件动态库文件(后缀为dll)复制到"),s("code",[t._v("\\IoTCenter\\dll")]),t._v("目录中。")])]),t._v(" "),s("li",[s("p",[t._v("重启服务后，扩展插件被自动调用执行。")])])]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 扩展插件开发中SetParm方法的作用是什么？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" SetParm方法用于扩展插件需要通过定时任务定时完成某些操作时的场景。可以参考"),s("RouterLink",{attrs:{to:"/intro/3开发指南/3.3扩展插件开发/3.3.1入门/"}},[t._v("扩展插件开发-入门")]),t._v("部分的内容。")],1),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 后端插件开发中如何取消对特殊字符的验证？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 在IoTCenter中启用了sql注入拦截，若需忽略，可在请求方法上加上"),s("code",[t._v("[SkipCustomFilter]")]),t._v("从而禁用sql注入。使用该特性需要引入"),s("code",[t._v("publish")]),t._v("目录下的"),s("code",[t._v("IoTCenterWebApi.Extension.dll")]),t._v("库。")]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 后端插件开发过程中如何引入第三方的库？")]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 后端插件开发引入第三方库的操作步骤如下：")]),t._v(" "),s("ol",[s("li",[s("p",[t._v("模板引擎使用6.1.0-alpha3及以上版本。安装代码如下")]),t._v(" "),s("div",{staticClass:"language-cs extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cs"}},[s("code",[t._v("dotnet "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("i IoTCenterCore"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ProjectTemplates"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6.1")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v(".0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("alpha3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),t._v("nuget"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("source")]),t._v(" https"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("nuget"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ganweicloud"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("com\n")])])])]),t._v(" "),s("li",[s("p",[t._v("安装模板后使用模板新建项目，在新建项目中将IoTCenterCore.EntityFrameworkCore包升级到6.0.1及以上版本，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7598),alt:""}})])]),t._v(" "),s("li",[s("p",[t._v("将"),s("code",[t._v("publish")]),t._v("目录下的"),s("code",[t._v("IoTCenterCore.EntityFrameworkCore.dll")]),t._v("文件使用"),s("code",[t._v("6.0.1")]),t._v("版本替换")])]),t._v(" "),s("li",[s("p",[t._v("将"),s("code",[t._v("publis")]),t._v("h目录下的"),s("code",[t._v("IoTCenterCore.dll")]),t._v("、"),s("code",[t._v("IoTCenterCore.Abstractions.dll")]),t._v("、"),s("code",[t._v("IoTCenterCore.Abstractions.Application.dll")]),t._v("三个文件使用"),s("code",[t._v("6.1.0-alpha3")]),t._v("版本替换。")])]),t._v(" "),s("li",[s("p",[t._v("将所引用的第三方包的dll文件跟项目生成的dll文件和json文件一起复制到"),s("code",[t._v("\\IoTCenterWeb\\publish\\plugins\\")]),t._v("对应目录下，如下图所示：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7599),alt:""}})])])]),t._v(" "),s("p",[s("strong",[t._v("Q：")]),t._v(" 前端插件开发过程中，编译时报错信息如下：")]),t._v(" "),s("p",[s("img",{attrs:{src:e(7600),alt:""}})]),t._v(" "),s("p",[s("strong",[t._v("A：")]),t._v(" 可以在"),s("code",[t._v("catch")]),t._v("后加上"),s("code",[t._v("(error)")]),t._v("既可解决。示例代码如下：")]),t._v(" "),s("div",{staticClass:"language-js extra-class"},[s("pre",{pre:!0,attrs:{class:"language-js"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])],1)}),[],!1,null,null,null);s.default=v.exports}}]);