




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
构建一个.net Remoting 程序(真正的三层结构)_吐血推荐2004年08月29日Blog fanxiaoduo构建一个.netRemoting程序(真正的三层结构)_突血推荐!NET Remoting提供了一个功能强大、高效的处理远程对象的方法。我在开发一个电力软件时,由于业务量大,必须用三层结构。实现数据处理(浏览、更新)但是这方面的资料很少。通过摸索我找到的方法。谨献给想用.net开发三层结构数据库应用软件而又苦于找不到方法的C#程序员。第一步:创建共享库依次点击“文件”-“新创建”-“工程”,选择创建一个C# Library,并将其命名为ydglServerLibrary,然后点击OK按钮。这将创建一个我们的.NET Remote客户端和服务器端用来通讯的“共享命令集”。正面是完整的代码usingSystem;usingSystem.Runtime ;usingSystem.Data.OleDb;usingSystem.Data.SqlClient;usingSystem.Data;usingSystem.Configuration;namespaceydglServerClassLibrary1/Class1 的摘要说明。/publicclassydglDB:System.MarshalByRefObjectprivateSystem.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;privateSystem.Data.OleDb.OleDbCommand oleDbSelectCommand1;privateSystem.Data.OleDb.OleDbCommand oleDbInsertCommand1;privateSystem.Data.OleDb.OleDbCommand oleDbUpdateCommand1;privateSystem.Data.OleDb.OleDbCommand oleDbDeleteCommand1;privateSystem.Data.OleDb.OleDbConnection oleDbConnection1;privateSystem.ComponentModel.Container components =null;publicvoidInitializeComponent()this.oleDbDataAdapter1 =newSystem.Data.OleDb.OleDbDataAdapter();this.oleDbSelectCommand1 =newSystem.Data.OleDb.OleDbCommand();this.oleDbInsertCommand1 =newSystem.Data.OleDb.OleDbCommand();this.oleDbUpdateCommand1 =newSystem.Data.OleDb.OleDbCommand();this.oleDbDeleteCommand1 =newSystem.Data.OleDb.OleDbCommand();this.oleDbConnection1 =newSystem.Data.OleDb.OleDbConnection();/ oleDbDataAdapter1/this.oleDbDataAdapter1.DeleteCommand =this.oleDbDeleteCommand1;this.oleDbDataAdapter1.InsertCommand =this.oleDbInsertCommand1;this.oleDbDataAdapter1.SelectCommand =this.oleDbSelectCommand1;this.oleDbDataAdapter1.TableMappings.AddRange(newSystem.Data.Common.DataTableMapping newSystem.Data.Common.DataTableMapping(Table, bm_gdfgs,newSystem.Data.Common.DataColumnMapping newSystem.Data.Common.DataColumnMapping(code, code),newSystem.Data.Common.DataColumnMapping(name, name);this.oleDbDataAdapter1.UpdateCommand =this.oleDbUpdateCommand1;/ oleDbSelectCommand1/this.oleDbSelectCommand1.CommandText = SELECT code, name FROM bm_gdfgs;this.oleDbSelectCommand1.Connection =this.oleDbConnection1;/ oleDbInsertCommand1/this.oleDbInsertCommand1.CommandText = INSERT INTO bm_gdfgs(code, name) VALUES (?, ?); SELECT code, name FROM bm_gdfgs W +HERE (code = ?);this.oleDbInsertCommand1.Connection =this.oleDbConnection1;this.oleDbInsertCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(code, System.Data.OleDb.OleDbType.VarChar, 2, code);this.oleDbInsertCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(name, System.Data.OleDb.OleDbType.VarChar, 40, name);this.oleDbInsertCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Select_code, System.Data.OleDb.OleDbType.VarChar, 2, code);/ oleDbUpdateCommand1/this.oleDbUpdateCommand1.CommandText = UPDATE bm_gdfgs SET code = ?, name = ? WHERE (code = ?) AND (name = ? OR ? IS NUL +L AND name IS NULL); SELECT code, name FROM bm_gdfgs WHERE (code = ?);this.oleDbUpdateCommand1.Connection =this.oleDbConnection1;this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(code, System.Data.OleDb.OleDbType.VarChar, 2, code);this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(name, System.Data.OleDb.OleDbType.VarChar, 40, name);this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_code, System.Data.OleDb.OleDbType.VarChar, 2, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), code, System.Data.DataRowVersion.Original,null);this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_name, System.Data.OleDb.OleDbType.VarChar, 40, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), name, System.Data.DataRowVersion.Original,null);this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_name1, System.Data.OleDb.OleDbType.VarChar, 40, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), name, System.Data.DataRowVersion.Original,null);this.oleDbUpdateCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Select_code, System.Data.OleDb.OleDbType.VarChar, 2, code);/ oleDbDeleteCommand1/this.oleDbDeleteCommand1.CommandText = DELETE FROM bm_gdfgs WHERE (code = ?) AND (name = ? OR ? IS NULL AND name IS NULL +);this.oleDbDeleteCommand1.Connection =this.oleDbConnection1;this.oleDbDeleteCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_code, System.Data.OleDb.OleDbType.VarChar, 2, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), code, System.Data.DataRowVersion.Original,null);this.oleDbDeleteCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_name, System.Data.OleDb.OleDbType.VarChar, 40, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), name, System.Data.DataRowVersion.Original,null);this.oleDbDeleteCommand1.Parameters.Add(newSystem.Data.OleDb.OleDbParameter(Original_name1, System.Data.OleDb.OleDbType.VarChar, 40, System.Data.ParameterDirection.Input,false, (System.Byte)(0), (System.Byte)(0), name, System.Data.DataRowVersion.Original,null);/ oleDbConnection1/this.oleDbConnection1.ConnectionString = User ID=sa;Data Source=BILLGATES;Tag with column collation when possible=False;Initial Catalog=ydgl;Use Procedure for Prepare=1;Auto Translate=True;Persist Security Info=False;Provider=SQLOLEDB.1;Workstation ID=BILLGATES;Use Encryption for Data=False;Packet Size=4096;/ Service1/publicDataSet Get_bm_gdfgs( )DataSet ds=newDataSet( );oleDbDataAdapter1.Fill(ds);returnds;publicDataSet Update_bm_gdfgs(DataSet ds)if(ds!=null)oleDbDataAdapter1.Update(ds);returnds;elsereturnnull;请记住,如果得到System.Runtime.Remoting.Channels.Tcp名字空间不存在的信息,请检查是否象上面的代码那样添加了对System.Runtime.Remoting.dll的引用。编译创建的工程,就会得到一个DLL文件,并可以在其他的工程中使用它。第二步:创建Server对象有几种方法可以创建Server对象,最直观的方法是下面的方法:在Visual Studio.NET中,依次点击“文件”-“新创建”-“工程”,选择创建一个“WindowsApplication”,并将它命名为ydglServer。最最重要的是,我们需要添加对刚才在第一步中所创建的DLL文件的应用,该应用程序才能正确地运行。依次点击“工程”-“添加引用”,然后通过点击“浏览”按钮添加一个对在第一步中所创建的DLL文件的引用。为了使用.NET remote功能,必须通过选择“工程”-“添加引用”,添加对DLL文件的引用。在.NET标签中选择System.Runtime.Remoting.DLL,然后点击“OK”按钮。然后,需要象我们在第一步中那样添加对System.Runtime.Remoting.dll的引用。下面的对象相当的简单和直观,我将就真正与.NET remoting相关的3行代码中的每一行进行解释。TcpServerChannel是.NET remoting支持的二种信道类型中的一种,它将设置我们希望我们的对象对来自哪一个端口的请求进行回应,ChannelServices.ReGISterChannel将把该端口号与操作系统中的TCP/IP栈绑定。TcpServerChannel channel = new TcpServerChannel(9932);ChannelServices.RegisterChannel(channel);另一种可以设置的信道类型是HTTP,只要简单地使用System.Runtime.Remoting.Channels.Http名字空间中的HttpServerChannel对象即可搞定。使用HTTP和TCP信道之间的区别可以简单的归结为:如果应用程序是在局域网上运行,则最好使用TCP信道,因为它的性能要好于HTTP信道;如果应用程序是在互联网上运行,则有时候根据防火墙的配置,HTTP是唯一的选择。需要记住的是,如果使用了防火墙软件,则防火墙应该配置成允许TCP数据流量通过你为对象选择的端口。RemotingConfiguration.RegisterWellKnownServiceType(typeof(ydglDB),ydglDB, WellKnownObjectMode.SingleCall);这行代码设置了服务中的一些参数和把欲使用的对象名字与远程对象进行绑定,第一个参数是绑定的对象,第二个参数是TCP或HTTP信道中远程对象名字的字符串,第三个参数让容器知道,当有对对象的请求传来时,应该如何处理对象。尽管WellKnownObjectMode.Single对所有的调用者使用一个对象的实例,但它为每个客户生成这个对象的一个实例。完整的对象代码如下所示:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.Runtime.Remoting;usingSystem.Runtime.Remoting.Channels;usingSystem.Runtime.Remoting.Channels.Tcp;usingydglServerClassLibrary1;namespaceydglserver1/Form1 的摘要说明。/publicclassForm1 : System.Windows.Forms.FormprivateSystem.Windows.Forms.PictureBox pictureBox1;privateSystem.Windows.Forms.Button button1;privateSystem.Windows.Forms.Button button2;privateSystem.Windows.Forms.Button button3;privateSystem.Windows.Forms.Label label1;privateSystem.Windows.Forms.Label label2;privateSystem.Windows.Forms.Label label3;privateSystem.Windows.Forms.ComboBox comboBox1;/必需的设计器变量。/privateSystem.ComponentModel.Container components =null;publicForm1()/ Windows 窗体设计器支持所必需的/InitializeComponent();/ TODO: 在 InitializeComponent 调用后添加任何构造函数代码/清理所有正在使用的资源。/protectedoverridevoidDispose(booldisposing )if( disposing )if(components !=null)components.Dispose();base.Dispose( disposing );#regionWindows 窗体设计器生成的代码/设计器支持所需的方法 - 不要使用代码编辑器修改/此方法的内容。/privatevoidInitializeComponent()System.Resources.ResourceManager resources =newSystem.Resources.ResourceManager(typeof(Form1);this.pictureBox1 =newSystem.Windows.Forms.PictureBox();this.button1 =newSystem.Windows.Forms.Button();this.button2 =newSystem.Windows.Forms.Button();this.button3 =newSystem.Windows.Forms.Button();this.label1 =newSystem.Windows.Forms.Label();this.label2 =newSystem.Windows.Forms.Label();this.label3 =newSystem.Windows.Forms.Label();boBox1 =newSystem.Windows.Forms.ComboBox();this.SuspendLayout();/ pictureBox1/this.pictureBox1.Image = (System.Drawing.Image)(resources.GetObject(pictureBox1.Image);this.pictureBox1.Location =newSystem.Drawing.Point(32, 96);this.pictureBox1.Name = pictureBox1;this.pictureBox1.Size =newSystem.Drawing.Size(56, 48);this.pictureBox1.TabIndex = 0;this.pictureBox1.TabStop =false;/ button1/this.button1.Image = (System.Drawing.Image)(resources.GetObject(button1.Image);this.button1.Location =newSystem.Drawing.Point(253, 52);this.button1.Name = button1;this.button1.Size =newSystem.Drawing.Size(32, 32);this.button1.TabIndex = 1;/ button2/this.button2.Image = (System.Drawing.Image)(resources.GetObject(button2.Image);this.button2.Location =newSystem.Drawing.Point(253, 100);this.button2.Name = button2;this.button2.Size =newSystem.Drawing.Size(32, 32);this.button2.TabIndex = 2;/ button3/this.button3.Image = (System.Drawing.Image)(resources.GetObject(button3.Image);this.button3.Location =newSystem.Drawing.Point(253, 148);this.button3.Name = button3;this.button3.Size =newSystem.Drawing.Size(32, 32);this.button3.TabIndex = 3;/ label1/this.label1.Location =newSystem.Drawing.Point(149, 60);this.label1.Name = label1;this.label1.Size =newSystem.Drawing.Size(32, 23);this.label1.TabIndex = 4;this.label1.Text = stop;/ label2/this.label2.Location =newSystem.Drawing.Point(149, 108);this.label2.Name = label2;this.label2.Size =newSystem.Drawing.Size(40, 23);this.label2.TabIndex = 5;this.label2.Text = pause;/ label3/this.label3.Location =newSystem.Drawing.Point(149, 156);this.label3.Name = label3;this.label3.Size =newSystem.Drawing.Size(96, 23);this.label3.TabIndex = 6;this.label3.Text = start/continue;/ comboBox1/boBox1.Location =newSystem.Drawing.Point(128, 24);boBox1.Name = comboBox1;boBox1.Size =newSystem.Drawing.Size(160, 20);boBox1.TabIndex = 7;boBox1.Text = ydglserver;/ Form1/this.AutoScaleBaseSize =newSystem.Drawing.Size(6, 14);this.ClientSize =newSystem.Drawing.Size(392, 237);this.Controls.Add(boBox1);this.Controls.Add(this.label3);this.Controls.Add(this.label2);this.Controls.Add(this.label1);this.Controls.Add(this.button3);this.Controls.Add(this.button2);this.Controls.Add(this.button1);this.Controls.Add(this.pictureBox1);this.Name = Form1;this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;this.Text = 电力营销应用服务器;this.Load +=newSystem.EventHandler(this.Form1_Load);this.ResumeLayout(false);#endregion/应用程序的主入口点。/STAThreadstaticvoidMain()Application.Run(newForm1();privatevoidForm1_Load(objectsender, System.EventArgs e)/注册信道TcpChannel chan=newTcpChannel(8085);ChannelServices.RegisterChannel(chan);/注册提供服务的远程对象RemotingConfiguration.RegisterWellKnownServiceType(typeof(ydglDB),ydglDB,WellKnownObjectMode.Singleton);第三步:创建Remote客户端程序ydgl是我们为对在上面创建的ydglServer远程对象进行测试而创建的。要创建这一工程,可以依次点击“文件”-“创建”-“工程”,然后选择创建一个windows Application类型、名字为ydgl的工程名。象在第二步中那样,我们需要添加对在第一步中创建的DLL文件和System.Runtime.Remoting DLL的引用。下面的代码中有二行对于.NET remoting而言是特别重要的。第一行创建了一个TCP客户端信道,该信道并不是绑定在一个端口上的;第二行获取了一个对远程的ydgldb对象的引用。usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;usingSystem.Runtime.Remoting;usingSystem.Runtime.Remoting.Channels;usingSystem.Runtime.Remoting.Channels.Tcp;usingydglServerClassLibrary1;namespaceWinUI/Form1 的摘要说明。/publicclassForm1 : System.Windows.Forms.FormprivateSystem.Windows.Forms.MainMenu mainMenu1;privateSystem.Windows.Forms.MenuItem menuItem1;privateSystem.Windows.Forms.MenuItem menuItem2;privateSystem.Windows.Forms.MenuItem menuItem3;privateSystem.Windows.Forms.MenuItem menuItem4;privateSystem.Windows.Forms.MenuItem menuItem5;privateSystem.Windows.Forms.MenuItem menuItem6;privateSystem.Windows.Forms.MenuItem menuItem7;privateSystem.Windows.Forms.Men
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮政寄递安全培训测试题及答案解析
- 2025年废电拆解行业研究报告及未来行业发展趋势预测
- 2025年1,3-二氯丙酮行业研究报告及未来行业发展趋势预测
- 2025年工业卷帘门行业研究报告及未来行业发展趋势预测
- 2025年防堵剂行业研究报告及未来行业发展趋势预测
- 玻璃厂报警处理记录管理规定
- 美发师工艺考核试卷及答案
- 2025山东中电装备青岛豪迈钢结构有限公司招聘退役军人考试参考题库及答案解析
- 2024年人工智能产业发展白皮书
- 2025四川攀枝花市第三人民医院招聘高层次人才考试参考题库及答案解析
- 西方音乐史全套完整教学课件
- 急诊急救护理教学课件
- 最新医疗安全十八项核心制度课件
- 住宅小区供配电系统设计课件
- 社保费和非税收入课件
- “三高”讲座-课件
- 年产12000吨水合肼(100%)项目环评报告书
- 建设工程施工合同(GF-2017-0201) 专用条款模板
- 普通冲床设备日常点检标准作业指导书
- 少儿英语字母操
- 义务教育(数学)新课程标准(2022年修订版)
评论
0/150
提交评论