WCF 的使用與經(jīng)驗(yàn)總結(jié)
發(fā)表時(shí)間:2023-09-12 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在項(xiàng)目設(shè)計(jì)之初沒(méi)有考慮到網(wǎng)絡(luò)安全因素,因?yàn)樵趶V達(dá)都是基于內(nèi)網(wǎng)開(kāi)發(fā)所以不用考慮網(wǎng)絡(luò)安全,但現(xiàn)在我們的服務(wù)器都放在公網(wǎng)上,數(shù)據(jù)庫(kù)和網(wǎng)站是在不同的server上,而且數(shù)據(jù)庫(kù)只能由網(wǎng)站一臺(tái)server能夠訪問(wèn),這樣我寫(xiě)的一些客戶端程序就不能使用了(客戶端是直連數(shù)據(jù)庫(kù)的),為了適應(yīng)這種變化不得不改寫(xiě)之前的程...
在項(xiàng)目設(shè)計(jì)之初沒(méi)有考慮到網(wǎng)絡(luò)安全因素,因?yàn)樵趶V達(dá)都是基于內(nèi)網(wǎng)開(kāi)發(fā)所以不用考慮網(wǎng)絡(luò)安全,但現(xiàn)在我們的服務(wù)器都放在公網(wǎng)上,數(shù)據(jù)庫(kù)和網(wǎng)站是在不同的server上,而且數(shù)據(jù)庫(kù)只能由網(wǎng)站一臺(tái)server能夠訪問(wèn),這樣我寫(xiě)的一些客戶端程序就不能使用了(客戶端是直連數(shù)據(jù)庫(kù)的),為了適應(yīng)這種變化不得不改寫(xiě)之前的程式,值得慶幸的是我的程序時(shí)采用三層架構(gòu),所以只需要再寫(xiě)一個(gè)server 端專(zhuān)門(mén)來(lái)處理數(shù)據(jù)得讀寫(xiě)就可以了,也就是把數(shù)據(jù)層拿出來(lái)作為服務(wù)器端。
開(kāi)始有想過(guò)用web service,但是發(fā)現(xiàn)web service 效率太低,現(xiàn)在微軟大力推薦用WCF,我測(cè)試了一下發(fā)現(xiàn)效率確實(shí)很高,正好也可以學(xué)習(xí)一下,服務(wù)器端就采用wcf通信,試用window service 來(lái)提供服務(wù),作為宿主,當(dāng)然你也可以選擇其它的宿主。在設(shè)計(jì)的時(shí)候遇到很多問(wèn)題,現(xiàn)做一個(gè)簡(jiǎn)單的總結(jié),希望能給你們帶來(lái)點(diǎn)幫助。
1. 在服務(wù)器與客戶端進(jìn)行數(shù)據(jù)交換,我個(gè)人喜歡用DataTable,發(fā)現(xiàn)在傳送的發(fā)現(xiàn)不能使用,提示不能序列化,在網(wǎng)上找好多才發(fā)現(xiàn),一定要給DataTable賦一個(gè)名字。
2. DataTable數(shù)據(jù)量比較大的時(shí)候發(fā)現(xiàn)會(huì)報(bào)錯(cuò),提示timeout,查找資料發(fā)現(xiàn)可以修改客戶端配置文件來(lái)修改接收的數(shù)據(jù)大小
maxReceivedMessageSize="6553600", <serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000" />
3. 我采用的是TCP通信,所以如果防火墻開(kāi)啟就會(huì)阻止其通信,可以在防火墻中添加例外,或是添加端口例外。
4. WCF可以傳送對(duì)象,這一點(diǎn)非常好,但不是所有的對(duì)象都能傳輸,只有能夠序列化的對(duì)象才能夠傳輸,至于怎么序列化可以參照我上次發(fā)的文檔,里面有詳細(xì)的介紹。
5. 在客戶端引用該服務(wù)的時(shí)候盡量不要去改服務(wù)的IP,可以在配置文件里修改,開(kāi)始引用的是什么就什么可以現(xiàn)在本地測(cè)試好,就可以直接部署到服務(wù)器上,如果不夠熟練的話會(huì)發(fā)生許多奇怪的問(wèn)題。
常見(jiàn)的網(wǎng)絡(luò)操作系統(tǒng)有UNIX、Netware、Windows NT、Linux等,網(wǎng)絡(luò)軟件的漏洞及缺陷被利用,使網(wǎng)絡(luò)遭到入侵和破壞。