1.制作目的
1.1 思路是因为自己的偷懒
公司要改变技术路线,向Java发展。没办法,身为普通职员的我,也只有硬着头皮学习Java 。在看EJB的时候,我就在想,如果在其他的开发环境下,也有一个类似于WebLogic的业务组件容器那多好。最好就是能将以前写的或者已经发布的exe,dll等程序都能组合起来,同时又具有分布式功能,那么不是就可以减少好多开发时间。为了自己的偷懒,于是自己动手编写一个这样的程序。
1.2 目的
1.让开发人员写更少的代码,不用关心如何管理服务器状态,这样能够更快地完成程序开发。
2.让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
3.在开发和实施中无需考虑系统安全,系统配置,数据库配置等于业务逻辑无关的信息。更多的时间专注于业务逻辑的完善等;
2.ECC适用范围及功能介绍
2.1 适用范围
DoNet开发环境;
2.2 功能介绍
提供分布式开发,开发者不必考虑系统级的设置;
提高程序可复用性,可扩展性。对开发者以前拥有的exe.dll等 文件可以不需要编译,直接运用于新的开发项目中;
2.3 部署图
Server ------Component
Client-----Server
3.ECC开发步凑
3.1 业务组件
3.1.1 业务组件加载到容器
选择菜单 -> 加载容器弹出 如图 3.1
然后选择加载组件的存放路径,就可以将已有的exe.dll等格式的程序作为业务组件供客户端调用了;注意 exe.dll等格式文件是必须是基于DoNet环境编制的;
基础配置
容器在对客户端开放的通信信道,容器的存在方式和响应模式都在这里设置。容器通道默认使用7001,7002,存在模式为无状态,响应模式为服务器响应;
配置数据源
点击鼠标右键,填写数据库配置名,数据库的信息,组件就可以通过数据库配置名访问数据库了;
3.1.2 业务组件的开发
例程1 (C# 代码)
新建立项目Component1,一个WinForm的程序;
窗体名:Form1
在Form1中定义一个方法:
public void TestMethod()
{
MessageBox.Show("这是第一步!");
}
注意:供客户端使用的方法或函数都要使用public 定义的;
这样就完成了一个简单的业务组件,加载进容器中,简单的配置客户端就可以使用了;
客户端开发
在客户端项目中引用ClientCase这个dll文件(ClientCase随着ECC容器一起发布)
加入命名空间:
using RemotingClientServices; (C#)
import RemotingClientServices ( Vb.Net)
定义变量:定义类型为RemotingClient的变量
private RemotingClient ClientServices; (C#)
ClientServices=new RemotingClient();
定义服务器开设的端口
ClientServices.TcpPort=7001;
ClientServices.HttpPort=7002;
定义服务器地址
ClientServices.ServerUrl="127.0.0.1";
客户端使用调用容器中组件的函数
public object TransferServices(函数在组件中类的名字,调用函数名,参数列表)
object[] ParamList=null;
ClientServices.TransferServices("Form1"," TestMethod ",ParamList);
这样客户端就完成了对业务组件的调用;
3.1.3 容器内业务组件之间的调用
可能开发者希望在组件中同样能进行“通话”,完成复杂的业务逻辑。很高兴,容器支持组件间相互访问功能;
新建工程,类型为类,生成 dll类型文件;
工程名:Component2
类名:MyClassComponent
引用ClientCase这个dll文件(ClientCase随着ECC容器一起发布)
加入命名空间:
using RemotingClientServices; (C#)
import RemotingClientServices ( Vb.Net)
定义变量:定义类型为ComponentVisit的变量
private ComponentVisit VisitClass; (C#)
VisitClass=new ComponentVisit ();
组件间访问的函数
public object ComponetByColloquy(string 函数在组件中类的名字, string 调用函数名, object[]参数列表);
object[] ParamList=null;
ClientServices.TransferServices("Form1"," TestMethod ",ParamList);
这样组件Component2就可以使用Component1中的方法了;
注意:要完成组件访问,在组件加入容器中,选择将组件拷贝到容器目录下选项;
3.1.4 组件使用系统数据连接
定义变量:定义类型为ComponentVisit的变量
private ComponentVisit VisitClass; (C#)
VisitClass=new ComponentVisit ();
获得数据连接
public bool VisitClass.GetConnection(string 数据连接名)
VisitClass.GetConnection(“MyDataSource”);
根据传递的SQL语句,填充DataSet数据集
public DataSet GetData(string SQLs)
VisitClass.GetData("Select * from Part");
提交修改数据
public bool ApplyUpdateData(System.Data.DataSet ApplyDataSet);
public bool ApplyUpdateData(System.Data.DataTable ApplyDataTable);
在使用提交数据函数时,必须设置对应操作的带参数的SQL语句,使用 initialAdapter多态函数;
bool initialAdapter(string PoolName,string InsertSQL,System.Data.DbType[] InsertParamType,string UpdateSQL,System.Data.DbType[] UpdateParamType,string DeleteSQL,System.Data.DbType[] DeleteParamType ): 设置除Access,SQLServer以外的数据库;
bool initialAdapter(string PoolName,string InsertSQL,System.Data.SqlDbType[] InsertParamType,string UpdateSQL,System.Data.SqlDbType[] UpdateParamType,string DeleteSQL,System.Data.SqlDbType[] DeleteParamType ):只适用于SQLServer数据库
bool initialAdapter(string PoolName,string InsertSQL,System.Data.OleDb.OleDbType[] InsertParamType,string UpdateSQL,System.Data.OleDb.OleDbType[] UpdateParamType,string DeleteSQL,System.Data.OleDb.OleDbType[] DeleteParamType ):只适用于Access数据库
执行SQL语句,不返回数据,只返回影响记录数
public int ExecSQL(string Sql);
这一组函数供组件使用,提供组件对数据库的使用;只要在容器中配置完数据连接,开发者可以根据在容器中定义的数据连接配置名,就可以得到对数据库的操作权;
4.容器中正在处理部分
4.1 事务处理
4.2 安全管理
4.2.1 证书验证
4.2.2 Windows安全
4.3 融合Win32程序
该容器为最早开发版本,我会在以后的时间逐步完善容器欠缺的功能,提供给大家一个快速,高效,稳定的分布式开发环境。现有版本中存在很多不足,希望大家能提出宝贵的意见和建议,同时也希望有兴趣的高手们投入开发当中。
5.开发说明
组件不能经过混淆,不然容器无法识别调用组件中提供的方法;
使用组件通信,数据库操作时,请求调用组件应加载入容器的目录下;