成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET遠程處理框架詳解

開發(fā) 后端
本文講述.NET遠程處理框架,包括介紹遠程對象部署在各個服務器端,客戶端除了實現查詢命令的解析和傳送外外,還有一個本地服務器,進行相應的本地查詢。

第1章 系統(tǒng)總體結構

1.1 總體結構

系統(tǒng)實現需要部署服務器端的遠程對象(即一個DbServerLibrary.dll),服務器端要注冊通道和該遠程對象。客戶端要實現一個本地查詢的服務器,同時根據SQL解析的結果向各個服務器發(fā)送命令,并將結果顯示在客戶端界面,服務器端可以接受并顯示相應的命令。

1.2 關鍵組件結構

系統(tǒng)結構中關鍵的組件有遠程對象,和本地服務器,實現的功能基本一致。下面以遠程對象為例,說明組件的實現。遠程對象在服務器端解決方案下的庫文件中聲明,通過服務器端進行注冊,客戶端通過TCP通道與服務器端遠程對象通信,實現數據集的查詢和傳輸。主要的數據成員有:SqlConnection(SQL Server數據庫的連接對象)、 SqlCommand (SQL命令對象)、SqlDataAdapter(數據適配器,填充數據集)組件——DbServerLibrary。

第2 章 .NET遠程處理框架提供的強大技術

因時間倉促,未實現數據字典,所有實驗要求的SQL經過解析后,直接通過代碼判斷,向相應場地發(fā)送命令。

代碼分為三部分:遠程對象,服務器端代碼和客戶端代碼。

其中:遠程對象部署在各個服務器端,客戶端除了實現查詢命令的解析和傳送外外,還有一個本地服務器,進行相應的本地查詢。

遠程對象代碼:

  1. usingSystem;  
  2. usingSystem.Runtime.Serialization;  
  3. usingSystem.Data;  
  4. usingSystem.Data.SqlClient;  
  5. usingSystem.Windows.Forms;  
  6. namespaceDbServerLibrary{  
  7. [SerializableAttribute]//ItisveryimportantforRemotingData  
  8. publicclassDbServer:MarshalByRefObject{  
  9. privatestringconnStr;  
  10. privatestringclientSql;  
  11. publicSqlConnectionsqlConn;  
  12. publicSqlCommandsqlComm;  
  13. publicSqlDataAdaptersqlAdapter;  
  14. publicvoidGetClientSql(stringsql){  
  15. if(clientSql!=null){  
  16. clientSql=null;  
  17. }  
  18. clientSql=sql;  
  19. MessageBox.Show(clientSql);  
  20. }  
  21. publicDbServer(){  
  22. //LocalDataInitialize  
  23. cnnStr="DataSource=localhost;InitialCatalog=DDB;UserID=sa;Password=;";  
  24. sqlConn=newSqlConnection(connStr);  
  25. }  
  26. publicDataSetGetDataSet()  
  27. //執(zhí)行select  
  28. DataSetds=newDataSet();  
  29. if(sqlComm!=null){  
  30. sqlComm=null;  
  31. }  
  32. if(sqlConn.State==ConnectionState.Closed){  
  33. sqlConn.Open();  
  34. }  
  35. try{  
  36. sqlComm=newSqlCommand();  
  37. sqlComm.Connection=sqlConn;  
  38. sqlComm.CommandText=clientSql;  
  39. sqlComm.CommandType=CommandType.Text;  
  40. sqlAdapter=newSqlDataAdapter();  
  41. sqlAdapter.SelectCommand=sqlComm;  
  42. sqlAdapter.Fill(ds);  
  43. }  
  44. catch(SqlExceptionex){  
  45. MessageBox.Show(ex.Message);  
  46. }  
  47. returnds;  
  48. }  
  49. publicintExecuteSql()//執(zhí)行insert和delete{  
  50. intaffectedNumber;  
  51. if(sqlComm!=null){  
  52. sqlComm=null;  
  53. }  
  54. if(sqlConn.State==ConnectionState.Closed){  
  55. sqlConn.Open();  
  56. }  
  57. try{  
  58. sqlComm=newSqlCommand();  
  59. sqlComm.Connection=sqlConn;  
  60. sqlComm.CommandType=CommandType.Text;  
  61. sqlComm.CommandText=clientSql;  
  62. affectedNumber=sqlComm.ExecuteNonQuery();  
  63. returnaffectedNumber;  
  64. }  
  65. catch(SqlExceptionex){  
  66. MessageBox.Show(ex.Message);  
  67. return0;  
  68. }  
  69. }  
  70. }  

服務器端代碼:

  1. privatevoidfrmSupplierServer_Load(objectsender,System.EventArgse)  
  2. {TcpChannelchan=newTcpChannel(8888);  
  3. ChannelServices.RegisterChannel(chan);  
  4. //注冊提供服務的遠程對象  
  5. RemotingConfiguration.RegisterWellKnownServiceType(typeof(DbServerLibrary.DbServer)
    "DbServer",WellKnownObjectMode.Singleton);  

 客戶端代碼:

解析SQL:SqlParse.cs

  1. namespaceSupplierClient{  
  2. publicclassSqlParse{  
  3. //得到sql語句的類型  
  4. publicstringGetSqlType(stringsqlText)//typeofSQLstatements{  
  5. }  
  6. //得到select語句要查詢的表名  
  7. publicstringGetSelectTableName(stringsqlText){  
  8. }  
  9. //得到select語句中的where子句  
  10. publicstringGetWhereClause(stringsqlText){  
  11. }  
  12. //得到查詢條件中的字段名  
  13. publicstringGetSelectField(stringsqlText){  
  14. }  
  15. //得到分片依據,返回Scity的值  
  16. publicstringGetSelectCityValue(stringsqlText){  
  17. }  
  18. //設定select語句經解析后的格式  
  19. publicArrayListSetSelectList(stringsqlText){  
  20. }  
  21. //如果沒有分片信息,則向3個場地都發(fā)送命令  
  22. publicArrayListSendToAllSite(stringsqlText){  
  23. }  
  24. //得到insert語句要查詢的表名  
  25. publicstringGetInsertTableName(stringsqlText){  
  26. }  
  27. //根據插入的表和值,設定場地:INSERTINTOSupplierVALUES('no','name','city'),returncity  
  28. publicstringGetInsertCityValue(stringsqlText){  
  29. }  
  30. //如果表名是Supplier,則根據city值設定向哪個場地發(fā)送命令  
  31. publicArrayListSetInsertSite(stringsqlText){  
  32. }  
  33. //生成解析后的insert命令列表  
  34. publicArrayListSetInsertList(stringsqlText){  
  35. }  
  36. namespaceSupplierClient{  
  37. publicclassLocalServer{  
  38. }  
  39. //返回查詢結果  
  40. publicDataSetMakeDataSet(stringsqlText){  
  41. }  
  42. //執(zhí)行插入和刪除操作,并返回影響記錄數  
  43. publicintExecuteSql(stringsqlText){  

第4 章 界面

4.1 客戶端

客戶端啟動后,用戶首先在文本框中輸入SQL命令,然后通過解析后向相應場地發(fā)送命令,并將返回的結果集進行合并,顯示在界面中,顯示結果后空白的文本框用來顯示執(zhí)行插入刪除操作時的結果信息。

4.2 服務器

服務器端僅實現對遠程對象的注冊,因此界面不需要實現功能,只需要在啟動時注冊遠程對象即可,接收到的客戶端的用戶命令是通過消息框顯示的。如上圖所示。

第5 章 命令處理及核心算法流程

Insert 操作——

  1. //得到insert語句要查詢的表名  
  2. publicstringGetInsertTableName(stringsqlText){  
  3. }  
  4. //根據插入的表和值,設定場地:INSERTINTOSupplierVALUES('no','name','city'),returncity  
  5. publicstringGetInsertCityValue(stringsqlText){  
  6. }  
  7. //如果表名是Supplier,則根據city值設定向哪個場地發(fā)送命令  
  8. publicArrayListSetInsertSite(stringsqlText){  
  9. }  
  10. //生成解析后的insert命令列表  
  11. publicArrayListSetInsertList(stringsqlText){  

Delete 操作——

向各個場地發(fā)送,通過定義數據庫中表的關系及約束來保證完整性和一致性,如果刪除命令不成功,則返回異常信息,否則,返回各個場地成功執(zhí)行命令影響的記錄數目。

Select 操作——

  1. //得到sql語句的類型  
  2. publicstringGetSqlType(stringsqlText)//typeofSQLstatements{  
  3. }  
  4. //得到select語句要查詢的表名  
  5. publicstringGetSelectTableName(stringsqlText){  
  6. }  
  7. //得到select語句中的where子句  
  8. publicstringGetWhereClause(stringsqlText){  
  9. }  
  10. //得到查詢條件中的字段名  
  11. publicstringGetSelectField(stringsqlText){  
  12. }  
  13. //得到分片依據,返回Scity的值  
  14. publicstringGetSelectCityValue(stringsqlText){  
  15. }  
  16. //設定select語句經解析后的格式  
  17. publicArrayListSetSelectList(stringsqlText){  
  18. }  
  19. //如果沒有分片信息,則向3個場地都發(fā)送命令  
  20. publicArrayListSendToAllSite(stringsqlText){  

第6章 結論

.NET遠程處理框架提供的一項強大的技術,利用它可以使位于任何位置的應用程序互相通信,這些應用程序可能在同一臺計算機上運行,也可能位于同一局域網中的不同計算機上,或者位于相隔萬里的有巨大差異的網絡中。

使用.NET Remoting技術結合ADO.Net能夠高效、可靠地解決這兩方面的問題。具體表現為,在C#中通過使用.Net遠程處理框架能夠方便地解決數據、命令遠程傳遞問題;C#通過ADO.Net對數據庫進行操作,使分布式數據庫系統(tǒng)中對數據庫的各種操作變得高效、可靠,同時易于解決數據一致性問題。

由于時間關系,程序中仍有部分bug,將在下一步繼續(xù)完善,而且,還應進一步完善數據字典,使程序結構更加清晰,增強可擴充性。

【編輯推薦】

  1. .NET 3.5擴展方法點評:優(yōu)點與問題
  2. 一個.NET調用PHP Web Service的典型例子
  3. .NET 4.0的ICustomQueryInterface新特性
  4. 在.NET反應性框架中實現LINQ
  5. .NET 3.5擴展方法和Lambda表達式
責任編輯:彭凡 來源: 51CTO博客
相關推薦

2010-01-05 10:29:43

.NET Framew

2010-07-02 09:25:37

.NET 4.0可擴展

2010-04-14 09:20:26

.NET多線程

2009-11-12 14:55:16

ADO.NET實體框架

2024-02-06 09:12:55

Dapper.NETORM框架

2010-09-15 09:18:21

ASP.NET MVC

2010-01-13 17:23:36

VB.NET動態(tài)事件

2010-01-05 09:26:13

.NET 4.0

2013-08-22 17:10:09

.Net異常處理

2009-04-09 14:42:19

ASP.NETLINQ數據庫

2010-10-09 08:41:40

Mono 2.8

2009-08-06 17:25:07

.NET框架基本要求

2009-09-01 16:08:27

.NET框架

2012-06-25 12:43:26

.NET框架

2009-07-24 13:20:44

MVC框架ASP.NET

2010-01-06 18:27:06

.Net Framew

2009-07-22 16:25:41

ASP.NET AJA

2009-07-24 10:14:22

ASP.NET開發(fā)

2009-07-28 16:57:50

ASP.NET Ses

2009-08-05 11:14:33

ASP.NET ISA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人成久久 | h在线| www国产成人免费观看视频,深夜成人网 | 武道仙尊动漫在线观看 | 欧美一级二级视频 | 亚洲国产一区二区在线 | 久久精品免费 | 久久逼逼 | 午夜羞羞 | 黄免费观看视频 | 欧美亚洲国产一区二区三区 | 久久精品高清视频 | 中文字幕高清免费日韩视频在线 | 日本在线一区二区 | 成人久久18免费网站麻豆 | 欧美精品一区二区三区四区 在线 | 国产精品免费在线 | 久久久久久九九九九九九 | 国产一区二区三区不卡av | 自拍第1页 | 亚洲综合热 | 美女黄视频网站 | 波多野吉衣在线播放 | 精品日本久久久久久久久久 | 国产福利在线 | 国产欧美精品一区二区 | 日韩欧美综合在线视频 | 99精品国产一区二区青青牛奶 | 九九热这里 | 91免费高清 | 少妇一级淫片免费放播放 | 久久久久国产精品 | 中文字幕久久精品 | 亚洲天堂日韩精品 | 日本二区 | 国产激情视频在线免费观看 | 午夜欧美 | 日韩中文字幕在线 | 亚洲欧洲视频 | 中文字幕精品一区二区三区精品 | 国产欧美日韩一区 |