本示例描述瞭如何創建一個WCF服務,並宿主在命令行應用程式中,客戶端可以訪問服務元數據,並以非同步的方式消費它。 首先,我們創建了一個WCF服務。關於如何創建WCF服務,可以參考我之前的文章(WCF學習之旅—第三個示例之一(二十七)至WCF學習之旅—第三個示例之五(三十一)) ...
接上文 多線程編程學習筆記——編寫一個非同步的HTTP伺服器和客戶端
本示例描述瞭如何創建一個WCF服務,並宿主在命令行應用程式中,客戶端可以訪問服務元數據,並以非同步的方式消費它。
首先,我們創建了一個WCF服務。關於如何創建WCF服務,可以參考我之前的文章(WCF學習之旅—第三個示例之一(二十七)至WCF學習之旅—第三個示例之五(三十一))
然後,我們進行非同步調用WCF的代理代碼的生成。
第三、在visual studio 的資源管理器中,滑鼠右鍵,在彈出菜單中選擇“添加服務引用…”。如下圖。
第四、在“添加服務引用”界面中,在選中需要添加的服務之後,點擊“高級”按鈕,在“服務引用設置”中選中“生成非同步操作”,然後點擊“確定”。如下圖。
第五, 在解決方案資源管理器中,選中“FrmBook.cs”文件,在彈出的右鍵菜單中選擇“打開”,或者使用滑鼠左鍵雙擊。
第六, 在FrmBook.cs界面中,添加“非同步查詢選中書籍”按鈕,並用滑鼠雙擊按鈕。
第七, 然後在 buttonAsyncGetBook_Click事件處理程式中添加以下代碼:
/// <summary> /// 非同步查詢書籍信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonAsyncGetBook_Click(object sender, EventArgs e) { Books book = new Books(); var client=GetAsyncBook(book); // client.GetAwaiter().GetResult(); // ShowBook(); } private async Task GetAsyncBook(Books book) { BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient(); if (gridBooks.SelectedRows.Count > 0) { book = gridBooks.SelectedRows[0].DataBoundItem as Books; textBoxMsg.Text = book.BookID.ToString(); await Task.Delay(200); var result = bookSvrClient.GetBookAsync(book.BookID.ToString()); textBoxMsg.Text = result.Result; } else { textBoxMsg.Text = "沒有選中相應的記錄!"; } }
第八,使用非同步調用WCF的這個服務之後,得到的結果如下圖。我的截圖跟WCF學習之旅—第三個示例系列 略微有點區別。