首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET Compact Framework 3.5 中使用 WCF 完整實戰指南

     編輯:關於.NET

隨著 WCF 普及,越來越多系統採用 WCF 進行數據交互。若移動設備仍保留傳統 Web Service 支援,企業將面臨維護雙重介面的負擔。升級至 WCF 後,僅需將原有 Web Service 遷移即可,大幅降低維護成本。

開發環境與服務端建立

  • VS2008 + Windows Mobile 5.0 PPC
  • 建立空白網站,新增 WCF Service 檔案(自動生成 IService.cs、Service.cs)
  • 定義 OperationContract 與 DataContract

WCF 服務專案結構

服務功能設計

  • 測試功能:輸入兩整數,返回相加結果
  • 查詢功能:返回 List<T> 泛型陣列(避免使用 DataTable,詳見文末 Tips)

Web.config 配置

使用 WCF Configuration 工具(在 web.config 右鍵 Open With 添加)可視化配置:

WCF 配置工具

啟動後效果:

WCF 服務運行截圖

客戶端開發

建立 WM5.0 專案(.NET CF 3.5),介面放置 DataGrid 綁定 WCF 返回數據。關鍵在於調用 WCF:

客戶端介面

生成客戶端代理代碼

使用 netcfSvcUtil.exe(位於 Program Files\Microsoft.NET\SDK\Compact Framework\v3.5\bin):

netcfSvcUtil.exe /language:cs https://localhost:3721/WCFSite/Service.svc

生成 CFClientBase.cs 與服務同名 cs 檔,加入專案。

生成的代理文件

調用代碼實現

System.ServiceModel.Channels.Binding binding = ServiceClient.CreateDefaultBinding();
string remoteAddress = ServiceClient.EndpointAddress.Uri.ToString();
remoteAddress = remoteAddress.Replace("localhost", "10.16.172.204"); // 替換為實際服務 IP
EndpointAddress endpoint = new EndpointAddress(remoteAddress);
ServiceClient client = new ServiceClient(binding, endpoint);
try {
    // MessageBox.Show(client.Add(10, 20).ToString());
    this.dataGrid1.DataSource = client.GetUserInfo();
} catch (Exception ex) {
    MessageBox.Show(ex.Message);
}

測試與調整

點擊 Get Data 返回數據:

初始數據綁定效果

調整 DataMember 的 Order 屬性修正欄位順序:

調整後效果

專案結構:

專案結構圖

關鍵 Tips

  1. 代理伺服器問題:公司網路若設代理,需在模擬器中移除代理設定並禁止連接 Internet,否則會觸發使用者驗證。
  2. WCF 不建議返回 DataSet/DataTable:
    • 雖可序列化,但生成的代理文件不直接使用原類型,而是包含樣式定義(無代碼)。
    • DataRow 無法序列化。
    • 雖可使用類型安全的子類,但 Programming WCF Services 指出:序列化產生的數據契約過於複雜,難與異構平台互通;暴露內部資料結構,未來資料庫變更將影響客戶端;跨應用/公共服務邊界傳遞 DataTable 非良策,應暴露操作而非數據本身。
  3. 替代裝載方式:WCF 可不建立網站,改用 Self-Host 方式開啟/關閉服務,此處不贅述。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved