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

.NET遠程處理框架詳解

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

第1章 系統總體結構

1.1 總體結構

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

1.2 關鍵組件結構

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

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

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

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

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

遠程對象代碼:

  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. //執行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()//執行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個場地都發送命令  
  22. publicArrayListSendToAllSite(stringsqlText){  
  23. }  
  24. //得到insert語句要查詢的表名  
  25. publicstringGetInsertTableName(stringsqlText){  
  26. }  
  27. //根據插入的表和值,設定場地:INSERTINTOSupplierVALUES('no','name','city'),returncity  
  28. publicstringGetInsertCityValue(stringsqlText){  
  29. }  
  30. //如果表名是Supplier,則根據city值設定向哪個場地發送命令  
  31. publicArrayListSetInsertSite(stringsqlText){  
  32. }  
  33. //生成解析后的insert命令列表  
  34. publicArrayListSetInsertList(stringsqlText){  
  35. }  
  36. namespaceSupplierClient{  
  37. publicclassLocalServer{  
  38. }  
  39. //返回查詢結果  
  40. publicDataSetMakeDataSet(stringsqlText){  
  41. }  
  42. //執行插入和刪除操作,并返回影響記錄數  
  43. publicintExecuteSql(stringsqlText){  

第4 章 界面

4.1 客戶端

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

4.2 服務器

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

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

Insert 操作——

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

Delete 操作——

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

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個場地都發送命令  
  20. publicArrayListSendToAllSite(stringsqlText){  

第6章 結論

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

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

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

【編輯推薦】

  1. .NET 3.5擴展方法點評:優點與問題
  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動態事件

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-07-24 13:20:44

MVC框架ASP.NET

2009-09-01 16:08:27

.NET框架

2012-06-25 12:43:26

.NET框架

2009-07-23 13:19:51

2010-01-06 18:27:06

.Net Framew

2009-07-22 16:25:41

ASP.NET AJA

2009-07-28 16:57:50

ASP.NET Ses

2009-08-05 11:14:33

ASP.NET ISA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区三区丝袜 | 亚洲国产成人av好男人在线观看 | 日日干日日色 | 色姑娘av| 国产亚洲精品精品国产亚洲综合 | 国产日韩欧美精品一区二区 | 亚洲人成一区二区三区性色 | 欧美视频一区二区三区 | 欧美精品一区二区在线观看 | 一区二区三区亚洲 | 成av在线| 九九热在线视频观看这里只有精品 | 91亚洲国产成人久久精品网站 | www精品美女久久久tv | 激情国产 | 日韩精品在线一区二区 | 日本天堂一区 | 丝袜美腿一区 | 综合久久综合久久 | 在线免费看91 | av中文字幕在线观看 | 日韩三级电影在线看 | 欧美一区二区三区在线观看 | 2021天天干夜夜爽 | 亚洲成av人片在线观看无码 | 国产在线高清 | 一区二区三区四区在线视频 | 一区二区三区在线免费观看视频 | 二区三区在线观看 | 一区二区三区日韩 | 本地毛片 | 亚洲一区中文字幕在线观看 | 国产午夜在线 | 久久精品97 | 巨大荫蒂视频欧美另类大 | 九九在线视频 | 国产激情网站 | 中文字幕91 | 亚洲精品电影在线观看 | 日本精品久久久久 | www国产成人 |