簡(jiǎn)述WCF Service先關(guān)問(wèn)題
WCF Service集成開(kāi)發(fā)環(huán)境包括許多新的和改進(jìn)的用于提高工作效率的功能。IDE 還進(jìn)行了重新設(shè)計(jì),從而向開(kāi)發(fā)人員提供對(duì).NET Framework 組件的直接訪問(wèn)。
在我們項(xiàng)目的開(kāi)發(fā)過(guò)程中,由于所有的業(yè)務(wù)都必須以WCF Service服務(wù)進(jìn)行發(fā)布。而且我們的WCF服務(wù)是部署在Windows Service上的,在實(shí)際的環(huán)境中,我們共部署了2個(gè)Windows Service,一個(gè)Service上Host了大部分WCF Service,另一個(gè)Service上Host了一個(gè)有關(guān)搜索的WCF Service,但是發(fā)布上去后,發(fā)現(xiàn)在前臺(tái)使用搜索服務(wù)時(shí)經(jīng)常報(bào)出TimeOut的錯(cuò)誤,剛開(kāi)始以為是代碼沒(méi)有更新,經(jīng)過(guò)多次的強(qiáng)制獲取代碼后,總會(huì)有一次服務(wù)是調(diào)用成功的。#t#
在有一次對(duì)本地的代碼進(jìn)行檢查后,發(fā)現(xiàn)代碼是***的,但是發(fā)布上去的服務(wù)還是出現(xiàn)“TimeOut”的錯(cuò)誤信息,而且在本地進(jìn)行測(cè)試時(shí)總是成功的。由于我們WCF服務(wù)是發(fā)布到WCF Service上的,在這種情況下是沒(méi)有辦法進(jìn)行跟蹤調(diào)試的,只能對(duì)代碼進(jìn)行分段跟蹤,發(fā)現(xiàn)問(wèn)題出現(xiàn)在***次調(diào)用搜索的方法上。
為了確認(rèn)問(wèn)題到底是出在搜索方法上還是WCF Service上,我們做了一個(gè)測(cè)試代碼,代碼中很簡(jiǎn)單的只寫(xiě)了一句調(diào)用搜索方法的語(yǔ)句,發(fā)現(xiàn)問(wèn)題依然存在。說(shuō)明我們所寫(xiě)的調(diào)用搜索方法應(yīng)該沒(méi)有問(wèn)題。又將WCF發(fā)布到Console上,測(cè)試時(shí)返回速度很快,沒(méi)有出現(xiàn)“TimeOut”的問(wèn)題。這說(shuō)明應(yīng)該是將WCF服務(wù)Host在Windows Service上時(shí),出現(xiàn)了問(wèn)題。
通過(guò)比較Console和Windows Service的區(qū)別,認(rèn)為Console程序是由登陸到本地的用戶進(jìn)行調(diào)用的,而我們所寫(xiě)的Windows Service是由Local System用戶進(jìn)行調(diào)用的,而Local System用戶在默認(rèn)的情況是系統(tǒng)System用戶(在任務(wù)管理器中會(huì)看到很多由System啟動(dòng)的進(jìn)程),不是當(dāng)前登陸的用戶,試著將服務(wù)的啟動(dòng)帳號(hào)修改為當(dāng)前的登陸用戶,問(wèn)題解決。
在進(jìn)行WCF Service部署時(shí),一定要注意是否有用戶權(quán)限的要求,如果有,一定要以相關(guān)的用戶來(lái)啟動(dòng)服務(wù),否則在調(diào)用Service中的方法時(shí),可能就會(huì)出現(xiàn)權(quán)限不足或者超時(shí)的相關(guān)問(wèn)題。