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