• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#远程数据访问(Remoting)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、 创建一个远程对象(DLL):新建一个解决方案(类库),命名为RemoteObject

创建一个类 RemoteTest,代码如下

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.SqlClient;

 

namespace RemoteObject

{

    public class RemoteTest : System.MarshalByRefObject//这是不能少的

    {

        SqlConnection con;

        DataSet ds;

        SqlDataAdapter da;

        string conStr = "data source=HEYU\\SQLEXPRESS;initial catalog=schooldatabase;integrated security=SSPI;persist security info=False;packet size=4096";

        string queryStr = "select   *   from   book";

        public DataTable datable()

        {

            using (con = new SqlConnection(conStr))

            {

                using (da = new SqlDataAdapter(queryStr, con))

                {

                    ds = new DataSet();

                    da.Fill(ds, "Categories");

 

                    return ds.Tables["Categories"];

                }

            }

        }

    }

}

 

2、创建服务器端程序,新建一个解决方案,命名为Sever,添加引用上面编译好的DLL

代码如下:

using System;

using System.Windows.Forms;

using System.Runtime.Remoting;//这个要添加引用

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

//也可以改用HTTP传输实现

namespace Sever

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

//注意第二个参数要和客户端的一致,可以为TRUE也可以为FALSE

            ChannelServices.RegisterChannel(new TcpServerChannel(9999), true);

RemotingConfiguration.RegisterWellKnownServiceType(

typeof(RemoteObject.RemoteTest), "heyu", WellKnownObjectMode.Singleton);

        }

    }

}

 

3创建服务器端程序,新建一个解决方案,命名为Client,添加引用上面编译好的DLL

代码如下:

using System;

using System.Windows.Forms;

using System.Runtime;

using System.Runtime.Remoting; //这个要添加引用

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

 

namespace Client

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            ChannelServices.RegisterChannel(new TcpClientChannel(),true);

            RemoteObject.RemoteTest obj = (RemoteObject.RemoteTest)Activator.GetObject(typeof(RemoteObject.RemoteTest), "tcp://192.168.1.103:9999/heyu");

            this.dataGridView1.DataSource = obj.datable();

        }

    }

}

 

以上的程序可以说是不能够再简单的了,只适合于初学者!因为创建这样的程序存在很多的缺点:

1、没有使用配置文件,使得更改服务器时要重新编译程序。

2、创建出来的远程对象服务器端和客户端的是一样,为了代码的安全性,且降低客户端对远程对象元数据的相关性,我们有必要对这种方式进行改动。即在服务器端实现远程对象,而在客户端则删除这些实现的元数据。更好的解决办法是配合反射来处理。注册远程对象时,我们不要注册类,通过定义接口,而实现过程的类又继承这一个接口,通过类名去反射创建这一个类对象(注意是object不是class,然后通过强制类型转换,把这个object赋给接口,这样就可以完全的分离了!做成代理工厂。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#关于params的用法(使用数量可变的参数)发布时间:2022-07-10
下一篇:
C#CLR简介发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap