zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
     

     

     

  • 相关阅读:
    SpringBoot安装和创建简单的Web应用
    Java设计模式-原型模式
    Java设计模式-单例模式
    Java设计模式-抽象工厂模式(Abstarct Factory)
    Java设计模式-工厂方法模式(Virtual Constructor/Polymorphic Factory)
    Java设计模式-简单工厂模式(Static Factory Method)
    Angular5学习笔记
    设置Nodejs NPM全局路径
    Actor模式初步入门
    Angular5学习笔记
  • 原文地址:https://www.cnblogs.com/chillsrc/p/5430934.html
Copyright © 2011-2022 走看看