這幾天開發一個WebService遇到很多問題,記錄下來順便幫助一下以后遇到情況的人。
我是通過ADO.NET來連接ORACLE的,也可以用ORACLE提供的ODP.NET。
通過正常的連接后部署IIS 用IE調用我的接口出現了
“System.InvalidOperationException: 嘗試加載 Oracle 客戶端庫時引發 BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現此問題。 ---> System.BadImageFormatException: 試圖加載格式不正確的程序。”
解決這個問題:
第一步原因:
我服務器系統是 Server2008 R2 64位 ORACLE的服務端安裝的是64位,客戶端安裝64位,為了解決了這個問題,我通過WinForm程序測試用ADO.NET通過64位的ORACLE客戶端連接64位服務端始終不成功。無奈之下安裝了32位的客戶端后就可以訪問了。
第二步原因:
我開發WebService的時候用2.0的框架,我本機系統是64位的WIN7,在生成程序的時候我是默認的Any CPU。可能生成發布的時候是64位的,網上有說改為X86,但這種方法也依然無法解決我的額外難題,然后我在IIS里對應網站的應用程序池里把“啟用32應用程序”設位Treu 這下可以運行了。
在調用WEBSERIVCE的時候又出現了問題,在IE調用接口報“webservice 返回datatable無法序列化 DataTable。未設置 DataTable 名稱。” 我webService調用了一個方法 方法返回值是DataTable 按照提示我把 DataTable加載了 Name但還是沒有解決這個問題,應為DataTable無法序列化 后來轉換為了DataSet解決了這個問題。
還有一個問題是沒有在目標機器上也就是沒有在部署的WEBSERIVCE的IIS機器上訪問Web接口的時候會出現“測試測試窗體只能用於來自本地計算機的請求。”的錯誤,這個問題解決方法要在配置文件里面添加
在web.config的<system.web></system.web>中間加入如下配置節內容
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>