VS2008環境下開發Web Service的一些注意事項

這幾天爲某旅行社開發一 Web Servcie 接口,在本地進行功能實現的時候,一切都很順利,從接到任務到實現也就只花了 1 個多小時的時間,可是在封裝成 Web Servcie 的時候,一些平時不太讓人注意的小地方地方耽誤了近 1 天的時間。現總結一下。
       開發軟件環境: Windows 2003 Ent, VS2008 Team
     1.    返回自定義class,但實際返回的倒是DataSet,即便實現了IxmlSerializable
自定義了一個 class ,因爲 WebService 須要對 class 進行 xml 序列化,因此實現了 IxmlSerializable 接口,可是在客戶端調用調試的時候,卻發現服務返回值不是自定義的 class ,而是一個 dataset 或者 dataset[] 。通過檢驗,致使如此結果發現仍是在序列化的過程當中出現了問題。在實現 IxmlSerializable 的時候,使用 XmlWriter 進行 tree 結構的序列化,而後使用 XmlReader 進行反序列化, CLR 會把這個 tree 結構認爲是 DataSet 序列化的結果,因此在反序列化的時候 .CLR 會把反序列化的結果轉爲 DataSet
若是要用 IxmlSerializable 實現自定義 class 的返回,最好使用 xml 架構文件進行驗證,這樣就能夠實現返回的是一個 class 而不是 DataSet( 該例子能夠在 msdn 上找到 )
    2.    沒法返回自定義class,即便對class申明瞭[Serializable]
因爲使用 IxmlSerializable 進行返回自定義 class 會比較麻煩,因此改用了 [Serializable] 進行實現。可是在實際中依然沒法返回 class 。怎麼回事呢?後來才發現,漏寫了一個無參構造函數。在 .NET 開發 Web Service 中,序列化機制須要調用一個無參構造函數來序列化和反序列化對象,並且這個無參構造函數最好顯式聲明。記得在 .NET1.1 下的時候,沒有顯式申明無參構造函數的時候會出現異常提示,可是在 .NET2.0 之後卻沒有了。
在顯示聲明無參構造函數後,能夠返回自定義 class 了,可是有些 public 屬性依然沒法進行序列化。怎麼回事呢?原來對於只有 get 功能的屬性, .NET [Serializable]Attribute 的序列化機制依然沒法對之進行序列化 。可是在實際狀況中, class 的一些字段只能是 get 不能是 set ,該如何解決?
     3.    序列化只有get功能的public property
     對於只有 get 功能的 public property ,解決的最簡單的方法就是定義個 set 空實現。即
public string Air
{
get{retrun _air;}
set{}
}
     4.    沒法進行遠程調試。
            在默認狀況下, VS05 之後上開發的 Web Servcie 默認狀況下是不支持遠程調試的。在調試頁面上會顯示以下信息:
          
           對於該問題,只須要在 Web.config 文件中的 <system.web> 節點下加入以下信息:
       <webServices>
            <protocols>
                  <add name="HttpGet"/>
                 <add name="HttpPost"/>
                 <add name="HttpSoap"/>
                 <add name="Documentation"/>
           </protocols>
   </webServices>
            其中的 < protocols > 節點指定了 ASP.NET Web 服務可用來接收從客戶端發送來的請求數據和返回響應數據的協議。
       5.部署的時候出現"服務器應用程序不可用"
               Web Service是用VS2008開發的,使用了LINQ TO XML和LINQ TO SQL,可是部署機子上是.NET2.0的環境,因此在服務器上裝了.NET 3.5的Framework。測試的時候,卻出現了「服務器應用程序不可用」。這個錯誤貌似在ASP.NET部署的時候常見問題。先使用 aspnet_regiis進行從新註冊,可是錯誤依舊。後來,對虛擬目錄指向的程序文件夾加入以下用戶問題獲得解決:
          ASP.NET          IIs_WPG          Internet來賓賬戶         System
相關文章
相關標籤/搜索