首先在這裏我要感謝張哥(親,若是你能看到),沒有他和他的框架就沒有我今天的思路。css
書接上回—總體實現思路服務器
1、編碼規範網絡
Pascal和Camel(具體如何實現,兄弟我就不詳細介紹了)app
2、通訊方式框架
WCF性能
選擇WCF主要是由於它集成了目前.net通訊的全部優勢方便之後擴展,之後想經過它試試TCP通訊,服務器端操控客戶端的一些功能
測試
方式:採用服務代理類(能夠靈活的配置服務器端地址)優化
方法:編碼
一、找到以下地址「C:\Windows\System32\cmd.exe」右鍵以管理員身份運行;spa
二、輸入命令:"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" /out:C:\WCFClinet \ChanelFactory.cs /config:C:\WCFClint\app.config http://localhost:81/WCFServiceTest/CNPatentSearchService.svc
注意事項:
一、把代理類拷貝到相應的類庫裏
二、把app.config裏的內容拷貝到啓動項的config裏
三、設置最大傳輸數據參數 maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
3、數據傳輸
以二進制數據形式傳入,傳出
方式:序列化-壓縮-解壓縮-反序列化
方法:
一、定義序列化和反序列化類
Serializer.cs(每個類必須單獨測試,我採用在測試啓動項裏,分別爲每一個類建立一個測試方法形式)
二、定義壓縮和解壓縮類
Compressor.cs
三、定義傳輸上帝類
TransGod.cs(主要負責DLL層傳入的實體類序列化,結果反序列化,做爲前臺通訊的中間處理)
四、定義服務處理類
ServiceDeal.cs(判斷傳過來的是哪一種執行方法,分別執行,傳回結果和異常信息)
注意事項:
一、壓縮方法
C#目前我知道有兩種壓縮方法,最初我用deflateStream,但當字節數小於256時返回值爲0,而且解壓不方便
後來採用GZipStream,你能夠問我感受怎麼樣,很是舒服啊^_^
詳細設計步驟(目前7層,比上回多出GlobalControler,WcfService)
本次只描述(多出/修改)的類或文件
1、CommonFiles(該類庫還能夠存放js、css文件等,方便文件管理)
一、XmlFolder(用於存放整個解決方案的Xml文檔)
1)GlobalXML.xml(用於存儲全局XML配置文件)
把該文件標記爲嵌入式文件經過反射獲得,對於xml文件我我的認爲指明路徑取不科學(我測試過)
2、DAL(本文章重點)
一、DataTransFolder(全部的數據傳輸操做都在這個文件夾裏完成)
1)Compressor.cs(壓縮類)
採用GZipStream,在解壓的時候有一個優勢能夠CopyTo(stream),比deflateStream方便不少
2)NetCommunicationServiceClient.cs(WCF代理類)
目前尚未優化它的傳入地址功能(寫文章前忘了Sorry)
3) Serializer.cs(序列化類)
能夠把壓縮和解壓縮分別集中到序列化和反序列化裏
4)ServiceDeal.cs(服務處理類)
把數據源預加載到內存(這塊須要注意的是,我想作一個通用的數據總線,不管Oracle,SQL都支持,判斷
傳過來的參數的dataSource選擇具體數據源,因爲通常項目默認就一個我在實體類dataSource里加了一個判斷,若是
爲空,給定默認數據源。
5)TransGod.cs(傳輸上帝類)
客戶端在調用時只需調用一個GetResult方法,傳入實體類用起來很是舒服,返回一個Dynamic類型數據,客戶端本身轉換。
二、DealXMLFolder(處理XML的文件夾)
1)XMLHelp.cs
傳入類庫DLL,文件位置,實體類,經過反射獲得傳入實體類的集合
採用Linq to Xml技術,比XmlDocument方便不少,建議你們試試
3、GlobalControler(全局控制類庫)
目前尚未實現類,準備把自定義控件、全局的事件工廠放在這個類庫裏
4、Model(模型類庫)
1)EnumFolder(存放枚舉類的文件夾)
ExecuteType.cs 執行方法枚舉類
2)ModelFolder(實體類)
1)InvokeTransformPackage.cs(數據網絡傳輸包類)
2)PingTransformPackage.cs(網絡通訊包)
3)ReturnTransformPackage.cs(返回值包)
5、WcfService(定義WCF服務)
傳入傳出就一個方法
public byte[] WebInvoke(byte[] data)
{
return ServiceDeal.Instance.Invoke(data);
}
遺留問題:
一、反射影響性能,不知各位是否有成熟的解決方案
二、XML嵌入到類庫裏,除了指定路徑,和反射是否有其餘好的辦法
三、B/S結構的VIEW層沒有找到好的框架,哪位仁兄能夠指點1、二
有緣看到這篇文章的博友,若是發現我哪裏有問題或者對哪裏感興趣,但願各類能指出,小弟萬分感激。
若是感興趣的博友可與我聯繫QQ449208380