WCF學習之旅—WCF第二個示例(七)


  WCF學習之旅目錄

WCF學習之旅——第一個WCF示例(一)

WCF學習之旅——第一個WCF示例(二)

WCF學習之旅——第一個WCF示例(三)

WCF學習之旅—WCF概述(四)

WCF學習之旅—WCF第二個示例(五)

WCF學習之旅—WCF第二個示例(六)

WCF學習之旅—WCF第二個示例(七)

 

三、創建客戶端應用程序

若要創建客戶端應用程序,你將另外添加一個項目,添加對該項目的服務引用,配置數據源,並創建一個用戶界面以顯示服務中的數據。

在第一個步驟中,你將 Windows 窗體項目添加到解決方案中,並將其設置為啟動項目。

第一步,創建客戶端應用程序

  1. 在菜單欄上,依次選擇“文件”、“添加”、“新建項目”。
  2. 在“添加新項目”對話框中,展開 “Visual C#”節點,選擇“Windows”節點,然后選擇“Windows 窗體應用程序”。
  3. 在“名稱”文本框中,輸入 WinClient,然后選擇“確定”按鈕。 如下圖。

    

      4.  在解決方案資源管理器中,選擇 WinClient項目節點。

     5.在菜單欄上,選擇“項目”、“設為啟動項目”。

 

第二步,添加服務引用

  1. 在菜單欄上,依次選擇“項目”、“添加服務引用”。
  2. 在“添加服務引用”對話框中,將WCF服務的 URL(http://127.0.0.1:8888/BookService/metadata) 將粘貼在“地址”字段中。

或者點擊“發現”按鈕,出現的WCF服務地址中選擇需要的URL。如下圖。

 

      3. 選擇“確定”按鈕以添加服務引用。

 

第三步,創建用戶界面

      1.在“解決方案資源管理器”窗口中,選中“WinClient”項目,彈出右鍵菜單,選擇“添加—》新建項”。如下圖。

    2. 在“Windows Forms”節點下,選擇“Windows窗體”,新建一個FrmBook.cs文件。如下圖。

 

      3. 在FrmBook窗體界面中按下圖,進行拖放窗體控件。如下圖。

      

 

4.  在解決方案資源管理器中,選中 FrmBook.cs文件,在彈出菜單中,選擇“查看代碼”以打開代碼編輯器,將以下代碼添加到 btnSearch_Click 事件處理程序中:

  private void btnSearch_Click(object sender, EventArgs e)

        {

            BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();

            textBoxMsg.Text = bookSvrClient.Search(string.Empty, string.Empty);

            List < Books > books= XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);

            gridBooks.DataSource = books;

   }

      5. 在菜單欄上,依次選擇“調試”和“啟動調試”以運行應用程序。在應用程序啟動之后,使用鼠標點擊“查詢書籍”按鈕, 此時將顯示書籍信息。 如下圖。

 

        現在,你有了一個可以使用的應用程序,該應用程序將顯示 BookService服務中的書籍列表。 如果希望通過該服務公開其他數據,則可以修改實體數據模型以包括數據庫中的其他表。

 

在下一個可選步驟中,將學習如何篩選服務返回的數據。

四、添加篩選功能

在此步驟中,將在應用程序中添加根據書籍的類型篩選書籍數據的功能。

  1. 在解決方案資源管理器中,選中“FrmBook.cs”文件,在彈出的右鍵菜單中選擇“打開”,或者使用鼠標左鍵雙擊。
  2. 將工具箱中的 Lable 控件、TextBox控件和 Button 控件添加到窗體。 其中在Label中填上“類型”,Button的中填上“查詢”。
  3. 打開 Button 控件的快捷菜單,選擇“查看代碼”,然后在 btnSearchCategory_Click事件處理程序中添加以下代碼:
 private void btnSearchCategory_Click(object sender, EventArgs e)

        {

            BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();

            textBoxMsg.Text = bookSvrClient.Search(txtCategory.Text, string.Empty);

            List<Books> books = XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);

            gridBooks.DataSource = books;

        }

     3. 在菜單欄上,依次選擇“調試”和“啟動調試”以運行應用程序。

    4. 在紅框中的文本框中,輸入 IBM,然后使用鼠標點擊“查詢”按鈕。 將僅顯示來自 類型為IBM 的書籍。如下圖。

     5.  FrmBook.cs的全部代碼見下面。

using SCF.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SCF.Model;
using SCF.Common; 

namespace WinClient
{
    public partial class FrmBook : Form
    {
        public FrmBook()
        {
            InitializeComponent();
        }

        private void btnGetBook_Click(object sender, EventArgs e)
        {
            Books book = new Books();
            BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
            if (gridBooks.SelectedRows.Count > 0)
            {

                book = gridBooks.SelectedRows[0].DataBoundItem as Books;
                textBoxMsg.Text = bookSvrClient.GetBook(book.BookID.ToString());
                book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
                txtBookId.Text = book.BookID.ToString();
                txtAuthorID.Text = book.AuthorID.ToString();
                textBoxName.Text = book.Name;
                textBoxCategory.Text = book.Category.ToString();
                textBoxPrice.Text = book.Price.ToString();
            }
            else
            {
                textBoxMsg.Text = "沒有選中相應的記錄!";
            }
        }

 

        /// <summary>
        /// ChannelFactory方式,直接在代碼中寫配置信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonChannelFactory_Click(object sender, EventArgs e)
        {

             using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>
                (new WSHttpBinding(), "http://127.0.0.1:8888/BookService"))
            {

                IBookService proxy = channelFactory.CreateChannel();
                using (proxy as IDisposable)
                {

                    textBoxMsg.Text = proxy.GetBook("4");
                    Books book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
                    txtBookId.Text = book.BookID.ToString();
                    txtAuthorID.Text = book.AuthorID.ToString();
                    textBoxName.Text = book.Name;
                    textBoxCategory.Text = book.Category.ToString();
                    textBoxPrice.Text = book.Price.ToString();
                }
            }
        }

        /// <summary>
        /// ChannelFactory配置方式,在配置文件中寫配置信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonChannelConfig_Click(object sender, EventArgs e)
        {
            using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>("WSHttpBinding_IBookService"))
            {
                IBookService proxy = channelFactory.CreateChannel();
                using (proxy as IDisposable)
                {

                    textBoxMsg.Text = proxy.GetBook("5");
                    Books book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
                    txtBookId.Text = book.BookID.ToString();
                    txtAuthorID.Text = book.AuthorID.ToString();
                    textBoxName.Text = book.Name;

                    textBoxCategory.Text = book.Category.ToString();
                    textBoxPrice.Text = book.Price.ToString();

                }
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {         

            BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
            textBoxMsg.Text = bookSvrClient.Search(string.Empty, string.Empty);
            List < Books > books= XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
            gridBooks.DataSource = books;
        }

        private void btnSearchCategory_Click(object sender, EventArgs e)
        {

            BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
            textBoxMsg.Text = bookSvrClient.Search(txtCategory.Text, string.Empty);
            List<Books> books = XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
            gridBooks.DataSource = books;
        }
    }
}
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM