|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听)今朝,基于数据库服务器的桌面办理程序和Web程序已有太多的使用了,特别是收集的大批提高,伶仃地数据库办理体系没法胜任散布式办理使用,可是面临基于Access数据库的现有的桌面使用我们也没法完整的摒弃。我们使用.Net远程处置功效将毗连和存取Access的举动封装为一个远程工具,供收集中别的客户端经由过程挪用该远程工具来存取实践的Access数据库。我们以C#2005为开辟言语来完成上述功效。
1、手艺要点
我们都晓得Windows使用程序在运转时会启动一个历程,其总包含多少线程,分歧的历程之间通讯是开辟散布式使用程序所必须的,传统上,这不但必要深切懂得通讯流两头长进程的工具,并且还要深切懂得初级别协定的宿主、使用程序编程接口和设置工具等。总之,它是一项必要大批专业常识和履历的庞大义务。
幸亏.Net为我们供应了远程处置功效,它所供应的通讯办法能够疾速而便利地完成上述创建通讯的义务。因而,不管是必要疾速开辟Web使用程序,仍是要消费更多工夫天生关头的企业局限的使用程序,.NETFramework城市供应撑持。经由过程.NET远程处置,客户端使用程序可使用统一台盘算机或其收集中其他任何可用的盘算机上的其他历程中的工具。
要利用.NET远程处置创立可让两个工具超过使用程序间接通讯的使用程序,只需天生以下工具便可:
1.可远程处置的工具。
2.侦听对该远程工具的哀求的使用程序即服务器程序。
3.对该远程工具收回哀求的客户端使用程序。
.Net下分歧使用程序中的工具的通讯体例有两种:一种是跨使用程序域界限传输工具正本,一种是利用代办署理互换动静。MarshalByRefObject是经由过程利用代办署理互换动静来举行通讯的工具的基类。当跨使用程序利用远程工具时,工具的基类必需是从MarshalByRefObject承继。
2、程序完成
1.我们先在VS的IDE中创立名为“TestRemoteAccess”的新的办理计划来包容前述用来完成远程处置的三个项目,起首向办理计划中增加名为“RemoteObject”的类库,然后将默许创立的类名变动为“CRemoteAccess”,而且承继于“MarshalByRefObject”,代码以下:
以下为援用的内容:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceRemoteObject
{
publicclassCRemoteAccess:MarshalByRefObject
{}
}
我们必要在该工具内创立用于毗连和存取当地Access数据库的一切函数,供服务端客户端程序同时挪用。用于毗连和存取Access数据库的办法这里不再胪陈,参看附件源码。
起首一切必要向客户端公然的函数其可见性都必需设为public.变量m_ConnString必要设置为publicstatic,目标是当客户端挪用了SetRemoteAccessConnString后将数据库毗连字符串保留上去以备在本次毗连时代一直可以会见,代码以下:
以下为援用的内容:
……
publicstaticstringm_ConnString;
……
publicvoidSetRemoteAccessConnString(stringConnstr)
{
m_ConnString=Connstr;
}
……
乐成毗连了Access数据库后我们必要前往数据集给哀求的客户端举行显现和编纂,在远程工具中我们声了然几个相干函数:
以下为援用的内容:
privatevoidLoadData(stringSqlStr,stringTableName)
publicvoidSaveData(DataTableClientDataTable)
publicDataTableGetUserTable(stringSqlStr,stringTableName)
客户端能够传送SQL查询剧本经由过程挪用GetUserTable来猎取相干数据库表的数据,并前往一个DataTable,然后能够将该DataTable附值给DataGridView以便将数据显现出来。GetUserTable经由过程挪用公有的LoadData函数来完成对数据的猎取。SaveData函数用于将编纂过的数据集保留回当地Access数据库文件,代码以下:
以下为援用的内容:
……
m_connection.Open();
m_adapter.Update(ClientDataTable);
……
2.远程工具创立完成,我们必要创立用于侦听该远程工具哀求的服务端使用程序。在“TestRemoteAccess”办理计划中新建一个Windows窗体项目名为:“TestServer”,从工具箱中拖拽下几个组件。
服务器程序TestServer除具有远程会见工具的才能外,它最次要的感化就是猎取实践的Access数据库文件路径,而且设置远程工具的数据库毗连字符串。我们必需增加远程工具和远程处置和收集通信协定等的类库的援用。在服务器程序启动初始,必要创立远程工具的实例和注册通讯端口,然后挪用RemotingConfiguration.RegisterWellKnownServiceType办法,MSDN中关于该办法的形貌是如许的:经由过程利用给定的参数初始化WellKnownServiceTypeEntry的新实例,将服务端上的工具Type注册为已知范例,一切晓得已注册已知工具的URI的客户都能够猎取该工具的代办署理。所谓URI即一致资本标识符(UniformResourceIdentifier)。代码以下:
以下为援用的内容:
……
remotableObject=newRemoteObject.CRemoteAccess();
TcpChannelchannel=newTcpChannel(8080);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.CRemoteAccess),"RithiaTestAccessServer",WellKnownObjectMode.Singleton);
……
中选择了要举行存取的Access数据库文件后,我们必要挪用远程工具的SetRemoteAccessConnString办法,该办法将保留在本次与服务器程序毗连时代毗连该Access数据库文件的毗连字符串,代码以下:
以下为援用的内容:
……
ProviderStr=ProviderStrPart+txtAccessMdbFileName.Text+";JetOLEDB:DatabasePassWord="+txtAccessPassword.Text;
……
remotableObject.SetRemoteAccessConnString(ProviderStr);
……
3.最初我们创立用于毗连和哀求服务的客户端程序,它会经由过程挪用服务器程序TestServer已注册的远程工具来猎取相干数据集,并将编纂过的数据保留回实践的数据库文件。在“TestRemoteAccess”办理计划中新建一个Windows窗体项目名为:“TestClient”,从工具箱中拖拽下几个组件.
客户端程序必要晓得服务器程序所运转在的盘算机称号或IP地点和侦听的端标语,然后创立远程工具的实例,而且创立DataTable以便吸收前往的数据,代码以下:
以下为援用的内容:
……
stringRemoteURL;
Host=txtHost.Text;
Port=txtPort.Text;
RemoteURL="tcp://"+Host+":"+Port+"/RithiaTestAccessServer";
try
{
TcpChannelchan=newTcpChannel();
ChannelServices.RegisterChannel(chan);
remoteObject=(RemoteObject.CRemoteAccess)Activator.GetObject(typeof(RemoteObject.CRemoteAccess),RemoteURL);
RemoteDataTable=newDataTable();
button3.Enabled=false;
}
catch(ExceptionE)
{
MessageBox.Show(E.Message.ToString());
}
finally
{
}
……
客户端程序依据服务程序所侦听的信道是TCP仍是HTTP来注册响应的信道和端标语,而且组分解远程工具的Url,即Url=信道://主机名:端标语/工具的Uri,然后创立远程工具的实例,就像利用当地工具一样能够对其举行存取,我们能够挪用远程工具的GetUserTable办法猎取指定查询剧本的了局集,代码以下:
以下为援用的内容:
……
RemoteDataTable=remoteObject.GetUserTable(txtSQL.Text,"Test");
dataGridView1.DataSource=RemoteDataTable;
……
保留了局集时仅需复杂挪用SaveData办法便可,代码以下:
以下为援用的内容:
……
remoteObject.SaveData(RemoteDataTable);
……
3、了局
该程序乐成地在VisualStudio.Net2005及WindowsXPSP2下调试运转经由过程。
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。 |
|