事情是這樣的,可能很多開發人員已經清楚,在Silverlight技術當中是不直接支援以ADO.NET方式來存取遠端DB的,關於這個部分,我在許多課堂中都有說明,隨著技術的改變與更新,現在有更好的方式在SL當中抓取資料,我們主要使用的是LINQ技術,在伺服器端可以配合LinqToSql和ADO.NET Entity Framework,所以我們會建議開發人員,在撰寫SL要呼叫的Web/WCF Services時,就直接透過LinqToSql or ADO.NET EF抓取資料,並且把抓到的資料直接以物件的方式回傳,這樣有一個超級棒的好處,就是在Silverlight去reference這個Web/WCF Services時,VS2010會自動在Silvelright端幫你generate這個物件的Type,然後你可以輕鬆的在SL當中使用這個物件,如同這個物件從伺服器端被傳到用戶端一樣。 例如: [WebMethod] public AddrssBook[] getAllData() { AddrBookDataContext db = new AddrBookDataContext(); var ret = from c in db.AddrssBooks select c; return ret.ToArray(); } 這邊的AddressBook類別是資料表名稱,是LinqToSql自動幫我們產生的類別定義。 當SL去呼叫這個Web Services時,在Silvelright端就會自動產生該類別(從Win/Web Form時代就是這樣),一切都相當容易。 但在這個多元化的時候,很可能有時候沒那麼單純,總是有很多奇怪的場合,你的客戶會要求你達成跨平台這個遠大的目標。這時候,你要考慮Services是不是有可能要讓其他開發技術(PHP? Java? @#$%^&*@#$%?)來呼叫...因此,把資料轉成大家看得懂並且容易解析的方式會比較理想,例如JSON...