最近遇到的一個項目中用到了標題所說的方法,用Spring.Net將業務類封閉成WebService供其它地方調用使用,感覺還是蠻新鮮的,於是在園子中搜了一篇園友寫的文章(這裡)自己也嘗試著搭了一個環境,最後是順利跑了起來,但是中間遇到了幾個問題,這裡記錄一下。
具體的搭建方法不再贅述,上面的文章寫的比較清楚了,主要問題:
1、配置文件引入方式
在配置文件web.config中引用spring.net的配置文件時,我並沒有像上面文章中一樣建了一個新的配置文件而是建了一個叫settings.xml的xml文件,但是效果是一樣的,spring.net都能識別的,因為config文件本身就是一個xml文件。然後在web.confg文件中的context節點中引入配置文件,依照上面文章中的寫法<resource uri="~/settings.xml"/>是沒問題的,可以成功啟動並完成封裝,但是用另外一種方式時<resource uri="aeesmbly://Spring.Net/Spring.Net/settings.xml"/>(一般來說我們在實際的項目中會用這種方式,因為我們都會對項目進行分層,不同的層關注並處理不同的業務,上面那種方法適用於引用當前項目集中的配置文件,要引用其它項目集中的配置文件時就要用這種方式),出了問題,會拋出InputStream為null的錯誤,其實就是沒有找到配置文件,原因是沒有把settings.xml文件設置為“嵌入的文件”(在屬性中設置)。
2、調用遠程調用問題
啟動成功後點擊頁面上的方法名然後點擊調用按鈕能看到返回結果,但是在另一個項目裡用WebClient進行調用時卻出了問題,拋出“遠程服務器關閉了一個現有連接”,然後發現只能用點擊調用按鈕的方式才能看到結果,換個浏覽器把地址復制進去回車也不能用。原因是沒有在配置文件web.config添加遠程調用協議,在system.web節點下添加如下代碼即可。
<webServices> <protocols> <add name="HttpPost"/> <add name="HttpGet"/> </protocols> </webServices>
3、返回值問題
使用這種方式封裝的WebService有個問題目前我還未找到解決辦法,就是返回值是xml類型的,不能通過在請求頭信息裡面設置類型的方式控制返回值類型(如json格式),都是xml類型的string字符串。