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

非同步呼叫 RESTful WCF 服務:HttpClient 與 WebClient 實作

     編輯:關於.NET

WCF 支援 REST 風格服務,搭配非同步呼叫可避免用戶端阻塞。本文以完整解決方案結構示範:契約專案、服務實作、自我裝載宿主、WinForm 非同步客戶端。

方案架構

  • Contracts:定義 [DataContract] 實體 Person 與 [ServiceContract] 介面 IService。
  • Service:實作 GetPerson,以 Thread.Sleep(5000) 模擬長時間運算。
  • Host:Console 應用程式裝載,webHttpBinding + webHttp 行為啟用 REST。
  • HttpClient:WinForm 使用 WebClient.DownloadStringAsync 非同步呼叫。

關鍵設定:webHttpBinding 啟用 REST

<endpoint address="" binding="webHttpBinding" 
          contract="AsyCallRestfulWcf.Contracts.IService"
          behaviorConfiguration="RestfulBehavior" />
<behavior name="RestfulBehavior">
  <webHttp />
</behavior>

服務方法以 [WebInvoke(Method = "*", UriTemplate = "GetPerson?id={id}")] 對應 HTTP GET。

客戶端非同步實作

private WebClient wc = new WebClient();

private void btnStart_Click(object sender, EventArgs e)
{
    wc.DownloadStringAsync(new Uri("https://localhost:8001/GetPerson?id=1"));
    wc.DownloadStringCompleted += Wc_DownloadStringCompleted;
    btnStart.Enabled = false;
    btnCancel.Enabled = true;
}

private void Wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (!e.Cancelled && e.Error == null)
        txtResult.Text = e.Result; // JSON 字串
    btnStart.Enabled = true;
    btnCancel.Enabled = false;
}

private void btnCancel_Click(object sender, EventArgs e)
{
    wc.CancelAsync();
    txtResult.Text = "請求已取消";
}

現代化建議

.NET Core / .NET 5+ 專案建議改用 HttpClient 搭配 await httpClient.GetStringAsync(uri),配合 CancellationToken 處理取消,程式碼更簡潔且支援跨平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved