web插件化解决方案 开发分享

web插件化解决方案 开发分享

经过苦逼的大半年开发,我的web插件花方案最终得以实现。系统由WebAPP运行时(Web Framework)和WebAPP开发IDE(APP IDE)两部分组成。由APP IDE开发出来的WebAPP运行在Web Framework上。

 

接下来我将从WebAPP的开发、发布、WebSite中运行WebAPP这三点来展开本文。

 

开发步骤一。在IDE中创建了一个项目,然后打开项目。编辑”appConfig“ 文件。

 

”appConfig“文件里可以定义APP的名称、开发者、描述等信息。

 

图1:web插件化解决方案 开发分享_第1张图片

 

 

use_global_classes:false

节点是设置是否在APP中使用自己的global类文件文件.类似aps.net的global文件。

 

use_global_verifyAC:false

节点是设置是否实现自己的访问控制方式。就是说某个APP可以是一个用户相关的系统,要实现自己的角色,权限的话就需要开启此选项。然后系统才会使用global类里相应权限验证方法。

 

error_handling_levels.global_classes:[ignore|interrupt]

节点是设置global类中对代码异常的处理机制。ignore:忽略所有错误,程序继续执行。interrupt:如果有错误,则程序将中断并且抛出异常。

 

开发步骤二。创建一个控件,控件实现一个表单。可以提交信息,并且打印出提交的结果。

 

系统中控件是必须在控件包中。而控件包是可以单独导入与导出,可以引用别人做好的控件到自己的项目中。这样可以大大的加快开发效率。

 

控件又包括UI控件,公共UI控件,自定义UI控件,自定义控件。特性如下

 

布局方式

外部使用

UI控件

包含在Panel里

 

公共UI控件

同上

仅支持。当APP安装之后,此类型的控件除了在APP内部可以使用。其他的APP也可以使用。

自定义UI控件

页面任何位置,布局以定位由控件自己实现。

 

自定义控件

无UI。此类型控件是无UI

 

 

 

分别创建一个名为“widget_1”的控件包和名为“Form”的UI控件。

 

图2:web插件化解决方案 开发分享_第2张图片

 

现在会发现,其实一个控件包含了三个文件。

tpl_content:模板文件。

tpl_schema:模板schema定义,约束tpl_content里标签的使用规则。

Form:控件类文件。

 

图3:web插件化解决方案 开发分享_第3张图片

 

控件类执行流程:

ctor->render->domReady

在类中render方法里返回了一段html字符串。当domReady的被调用的时候得到htmlDoc对象,获取到html dom,然后给id=form1的表单元素绑定了一个submit事件。事件里把表单元素,title,tag,content的值取出来显示到id=tips的p容器里。

这里为了方便讲解,所以render里直接写了一段html。在正常开发中应避免使用这种方式,可以将html资源放到tpl_content里。这样其他人可以对这个控件的模板进行重写。为了防止模板被其他人改错。还可以为模板设置schema。这样编辑器就会自动对模板进行验证。

 

还可以在控件类中定义属性,当控件放入页面设计器中。可以对这个属性进行编辑。

 

图4:web插件化解决方案 开发分享_第4张图片

 

开发步骤三。新建一个post_news的webform页面。并且使用前面开发好的控件。

 

图5:web插件化解决方案 开发分享_第5张图片

 

在页面设计器中可以很方便的拖拽控件到页面中。在设置面板里可以设置控件的属性以及模板。

现在可以预览了。

 

图6:web插件化解决方案 开发分享_第6张图片

 

页面预览有两种模式,[debug]模式下,会出现调试框。程序里使用的console.log语句会被打印出来。选择调试模式。

 

图7:web插件化解决方案 开发分享_第7张图片

 

注意到控制台没,调试信息的顺序也就是前面说到的控件类的执行流程。ok,点击提交。

 

图8:web插件化解决方案 开发分享_第8张图片

 

现在发生变化了,输入的信息也打印出来了。debug信息也有变化。这里要提一下,当点击发表按钮的时候页面是不会刷新的。在系统中,凡是在domReady中绑定的事件均是异步请求。

 

开发步骤四。现在我们项目中有一个控件和一张页面。现在我将这个APP打包并且发布到一个集中存储的地方,让别人也可以时用。

 

图9:web插件化解决方案 开发分享_第9张图片

 

以此点击打包->发布。APP 开发现在就告一段落了。我们去网站上使用开发出来的这个APP吧。

使用:进入网站管理后台。

 

图10:web插件化解决方案 开发分享_第10张图片

 

点击添加。

 

图11:web插件化解决方案 开发分享_第11张图片

 

很快就找到刚刚发布的 “Jaws News”APP。点击安装。

 

图12:web插件化解决方案 开发分享_第12张图片

 

图13:web插件化解决方案 开发分享_第13张图片

 

进入页面管理。

 

图14:web插件化解决方案 开发分享_第14张图片

 

点击预览。

 

图15:web插件化解决方案 开发分享_第15张图片

 

也可以点击设计

 

图16:web插件化解决方案 开发分享_第16张图片

 

通过这些讲解,大家应该对我设计的这个系统有了初步的了解。

这个系统纯粹是兴趣爱好,完全也是业余时间做的。在技术实现上很多都不是很理想,希望能和大家一起交流,互相学习。

 

上demo地址:http://vm-192-168-13-22.shengyun.grandcloud.cn/index.aspx

.net自动更新组件Ant

  Ant是基于Beetle实现开源的自动更新工具,主要包括三大部分:网络文件服务,文件更新管理和客户端更新组件.

  • 网络文件服务

web插件化解决方案 开发分享_第17张图片

服务端主要用于文件管理,包括文件上传和下载。服务在开启的时候必须生成rsa证书,主要是用于管理端更新文件时进行一个有效性验证.

  • 文件更新管理

web插件化解决方案 开发分享_第18张图片

文件管理端是用于管理更新的文件,必须把服务端生成的private key放到管理端目录下才能有效验证.Ant的更新允许目录结构更新,所以Client更新的时候如果本地没有相关目录结构文件时会自动根据需要进行创建。Ant的文件更新也没有采用版本号作为更新标记,只要管理端更新了对应的文件就会生成一个新的GUID值,Client在更新的时候比较对应的GUID不对应就会更新相应的文件。

  • 客户端更新组件

web插件化解决方案 开发分享_第19张图片

自动更新程序是一个Exe文件,放在程序对应就的目录下组件提供相关对象方法来检测更新源。

  • 程序使用组件

在使用之前必须你的程序的配置文件里添加.

复制代码
<configuration>
  <configSections>
    <section name="beetle" type="Beetle.ConfigSelection, Beetle"/>
    <section name="antUpdateSection" type="Ant.Component.AntUpdateSection, Ant.Component"/>
  </configSections>
  <beetle Connections="10"
          Pools="1"
          SocketSendThreads="1"
          SocketReceiveThreads="1"
          SocketThreadSleep="10"
          WorkThreads="1"
          WorkThreadSleep="10"
          SendBufferSize="8048"
          ReceiveBufferSize="8048"
          PackageMaxSize="120000"
          StringEncodingSize="64000"
          ChannelMaxQueueData="0"
          ExecutionContext="False"
          TimeOut="30"
          Statistics="True"/>
  <antUpdateSection xmlns="urn:Ant.Component" host="127.0.0.1" port="9560">
  </antUpdateSection>
</configuration>
复制代码

配置信息有两项,一项是beetle的配置信息,另一项就是配置Ant更新信息主要包括更新服务的IP地址或域名和端口.使用的时候引用Ant.Component.Dll组件然后在主窗体里使用如下代码:

复制代码
        private void Form1_Load(object sender, EventArgs e)
        {
            Updater update = new Updater();
            if (update.Detect())
            {
                Close();
                update.Update("Ant.Update.Test.exe", true);
               
            }
        }
复制代码

以上代码主要是创建一个updater对象,然后检测服务端的更新信息检测是否存在更新,如果存在则调用Update方法即可,Update的参数分别为更新后执行的.exe文件和是否自动关闭更新窗体.

下载组件完整代码

专注于可靠、高性能的Socket TCP通讯组件 文件管理File类

文件管理File类

  在上一讲中,我们学习了泛型集合的几种类型,今天这讲我们主要研究下File的基本使用。

  首先,File类是个静态类,无法实例化。它的命名空间是:using System.IO

  File中基本的方法如下演示:

 

web插件化解决方案 开发分享_第20张图片

图一、File.Create

 

web插件化解决方案 开发分享_第21张图片

 

图二、File.Copy一般情况

 

web插件化解决方案 开发分享_第22张图片

 

图三、File.Copy(path,path1,true);

 

 

图四、File.Delete

 

web插件化解决方案 开发分享_第23张图片

 

 

图五、File.Exists();

 

 

web插件化解决方案 开发分享_第24张图片

图六、File.Move

 

web插件化解决方案 开发分享_第25张图片

图七、File.ReadAllLines()

 

web插件化解决方案 开发分享_第26张图片

 

图八、ReadAllText和ReadAllLines的区别

 

 

图九、一道简单的练习题

 

web插件化解决方案 开发分享_第27张图片

 

图十、File.Replace

 

web插件化解决方案 开发分享_第28张图片

 

图十一、File.WriteAllLines()

 

web插件化解决方案 开发分享_第29张图片

 

图十二、File.WriteAllText( )

 

 

图十三、File.AppendAllLines( )

 

web插件化解决方案 开发分享_第30张图片

 

图十四、File.AppendAllText( )

上面,我们总结了File文件中的方法。我想说的是在实践也就是做项目当中。这些基本的方法会帮助到我们。所谓,不积跬步,无以至千里。灵活的使用,一个在于多练,另一个需要注意的是需要多加的总结。

 以下内容,开始介绍如何创建文件夹等内容。

 

web插件化解决方案 开发分享_第31张图片

图十五、Directory.CreateDirectory

 

web插件化解决方案 开发分享_第32张图片

 

图十六、Directory.Exists

web插件化解决方案 开发分享_第33张图片

 

图十七、Directory.GetCreationTime

 

web插件化解决方案 开发分享_第34张图片

 

图十八、Directory.GetCurrentDirectory

 

 

web插件化解决方案 开发分享_第35张图片

图十九、Directory.GetFiles( )

 

 

web插件化解决方案 开发分享_第36张图片

图二十、Directory.Move

 

作者近期文章列表:

C#基础教程(完全免费,献给代码爱好者的最好礼物。注:本 作者分享自己精心整理的C#基础教程,无任何商业目的。希望与 更多的代码爱好者交流心得,也请高手多多指点!!!)
面向过程 三种循环的比较
C#中的方法(上)
我们常见的数组
面向对象 思想的转变
C#中超级好用的类
C#中析构函数和命名空间的妙用
C#中超级好用的字符串
C#中如何快速处理字符串
值类型和引用类型及其它
ArrayList和HashTable妙用一
ArrayList和HashTable妙用二
GDI+ 这些年我收集的GDI+代码
这些年我收集的GDI+代码2
HTML概述 你不能忽视的HTML语言
你不能忽视的HTML语言2精编篇
你不能忽视的HTML语言3
 
 

你可能感兴趣的:(静态类,File',无法实例化)