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 事件处理程序中:

  1. private void btnSearch_Click(object sender, EventArgs e)
  2.  
  3. {
  4.  
  5. BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
  6.  
  7. textBoxMsg.Text = bookSvrClient.Search(string.Empty, string.Empty);
  8.  
  9. List < Books > books= XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
  10.  
  11. gridBooks.DataSource = books;
  12.  
  13. }

5. 在菜单栏上,依次选择“调试”和“启动调试”以运行应用程序。在应用程序启动之后,使用鼠标点击“查询书籍”按钮, 此时将显示书籍信息。 如下图。

现在,你有了一个可以使用的应用程序,该应用程序将显示 BookService服务中的书籍列表。 如果希望通过该服务公开其他数据,则可以修改实体数据模型以包括数据库中的其他表。

在下一个可选步骤中,将学习如何筛选服务返回的数据。

四、添加筛选功能

在此步骤中,将在应用程序中添加根据书籍的类型筛选书籍数据的功能。

  1. 在解决方案资源管理器中,选中“FrmBook.cs”文件,在弹出的右键菜单中选择“打开”,或者使用鼠标左键双击。
  2. 将工具箱中的 Lable 控件、TextBox控件和 Button 控件添加到窗体。 其中在Label中填上“类型”,Button的中填上“查询”。
  3. 打开 Button 控件的快捷菜单,选择“查看代码”,然后在 btnSearchCategory_Click事件处理程序中添加以下代码:
  1. private void btnSearchCategory_Click(object sender, EventArgs e)
  2.  
  3. {
  4.  
  5. BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
  6.  
  7. textBoxMsg.Text = bookSvrClient.Search(txtCategory.Text, string.Empty);
  8.  
  9. List<Books> books = XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
  10.  
  11. gridBooks.DataSource = books;
  12.  
  13. }

3. 在菜单栏上,依次选择“调试”和“启动调试”以运行应用程序。

4. 在红框中的文本框中,输入 IBM,然后使用鼠标点击“查询”按钮。 将仅显示来自 类型为IBM 的书籍。如下图。

5.  FrmBook.cs的全部代码见下面。

  1. using SCF.Contracts;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.ServiceModel;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using SCF.Model;
  13. using SCF.Common;
  14.  
  15. namespace WinClient
  16. {
  17. public partial class FrmBook : Form
  18. {
  19. public FrmBook()
  20. {
  21. InitializeComponent();
  22. }
  23.  
  24. private void btnGetBook_Click(object sender, EventArgs e)
  25. {
  26. Books book = new Books();
  27. BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
  28. if (gridBooks.SelectedRows.Count > )
  29. {
  30.  
  31. book = gridBooks.SelectedRows[].DataBoundItem as Books;
  32. textBoxMsg.Text = bookSvrClient.GetBook(book.BookID.ToString());
  33. book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
  34. txtBookId.Text = book.BookID.ToString();
  35. txtAuthorID.Text = book.AuthorID.ToString();
  36. textBoxName.Text = book.Name;
  37. textBoxCategory.Text = book.Category.ToString();
  38. textBoxPrice.Text = book.Price.ToString();
  39. }
  40. else
  41. {
  42. textBoxMsg.Text = "没有选中相应的记录!";
  43. }
  44. }
  45.  
  46. /// <summary>
  47. /// ChannelFactory方式,直接在代码中写配置信息
  48. /// </summary>
  49. /// <param name="sender"></param>
  50. /// <param name="e"></param>
  51. private void buttonChannelFactory_Click(object sender, EventArgs e)
  52. {
  53.  
  54. using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>
  55. (new WSHttpBinding(), "http://127.0.0.1:8888/BookService"))
  56. {
  57.  
  58. IBookService proxy = channelFactory.CreateChannel();
  59. using (proxy as IDisposable)
  60. {
  61.  
  62. textBoxMsg.Text = proxy.GetBook("");
  63. Books book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
  64. txtBookId.Text = book.BookID.ToString();
  65. txtAuthorID.Text = book.AuthorID.ToString();
  66. textBoxName.Text = book.Name;
  67. textBoxCategory.Text = book.Category.ToString();
  68. textBoxPrice.Text = book.Price.ToString();
  69. }
  70. }
  71. }
  72.  
  73. /// <summary>
  74. /// ChannelFactory配置方式,在配置文件中写配置信息
  75. /// </summary>
  76. /// <param name="sender"></param>
  77. /// <param name="e"></param>
  78. private void buttonChannelConfig_Click(object sender, EventArgs e)
  79. {
  80. using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>("WSHttpBinding_IBookService"))
  81. {
  82. IBookService proxy = channelFactory.CreateChannel();
  83. using (proxy as IDisposable)
  84. {
  85.  
  86. textBoxMsg.Text = proxy.GetBook("");
  87. Books book = XMLHelper.DeSerializer<Books>(textBoxMsg.Text);
  88. txtBookId.Text = book.BookID.ToString();
  89. txtAuthorID.Text = book.AuthorID.ToString();
  90. textBoxName.Text = book.Name;
  91.  
  92. textBoxCategory.Text = book.Category.ToString();
  93. textBoxPrice.Text = book.Price.ToString();
  94.  
  95. }
  96. }
  97. }
  98.  
  99. private void btnSearch_Click(object sender, EventArgs e)
  100. {
  101.  
  102. BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
  103. textBoxMsg.Text = bookSvrClient.Search(string.Empty, string.Empty);
  104. List < Books > books= XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
  105. gridBooks.DataSource = books;
  106. }
  107.  
  108. private void btnSearchCategory_Click(object sender, EventArgs e)
  109. {
  110.  
  111. BookServiceRef.BookServiceClient bookSvrClient = new BookServiceRef.BookServiceClient();
  112. textBoxMsg.Text = bookSvrClient.Search(txtCategory.Text, string.Empty);
  113. List<Books> books = XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);
  114. gridBooks.DataSource = books;
  115. }
  116. }
  117. }

WCF学习之旅—WCF第二个示例(七)的更多相关文章

  1. WCF学习之旅—WCF第二个示例(五)

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...

  2. WCF学习之旅—WCF第二个示例(六)

    第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...

  3. WCF学习之旅—第三个示例之五(三十一)

       上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九) WCF学习 ...

  4. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  5. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  6. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  7. WCF学习之旅—WCF服务部署到应用程序(十)

    上接  WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...

  8. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  9. WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)

    上接    WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...

随机推荐

  1. python urllib

    在伴随学习爬虫的过程中学习了解的一些基础库和方法总结扩展 1. urllib 在urllib.request module中定义下面的一些方法 urllib.request.urlopen(url,d ...

  2. PDA固定资产条码管理系统软件-解决固定资产实物清查的瓶颈问题,大大提高清查效率

    固定资产管理系统是企业信息化管理中的一个重要组成部分,固定资产具有价值高,使用周期长.使用地点分散.管理难度大等特点.一个企业的良性发展,避免不了的要涉及到企业资产的有效管理.对于那些技术装备密集型的 ...

  3. 返水bug-备用

    NOOK(N) CSBFB(25) off(Y) QQ(2652880032) G(1) off1(Y) QQ1(3479301404) G1(1) off2(Y) QQ2(309235846) G2 ...

  4. iOS Swift 数组 交换元素的两种方法

    swap(&arr[fromIndexPath.row], &arr[to.row]) (arr[fromIndexPath.row],arr[to.row]) = (arr[to.r ...

  5. mac安装java8

    http://stackoverflow.com/questions/24342886/how-to-install-java-8-on-mac brew tap caskroom/cask brew ...

  6. JAXP简介

    JAXP(Java API for XML Processing,意为XML处理的Java API) JAXP是SUN公司推出的,集成在javase中的用来解析和操作XML的应用程序接口,解析XML文 ...

  7. Array方法

    1.concat()方法 用法:用于连接两个或者多个数组. 对原数组有无影响:不会改变原有数组,会返回一个连接之后的数组. 2.join()方法 用法:以指定的分隔符把数组中每一项拆分成字符串. 对原 ...

  8. Django 权限管理

    对于Django而言,虽然自带了一些基本的通用权限限制,但现实中,可能我们更希望自己去定义业务权限划分 Django对于权限这块的部分验证方法 user = request.user user.is_ ...

  9. 关于react native

    刚开始学习react native,有很多的不懂,记录一些小知识,也许下一个项目可能用到,活到老学到老........ http://www.lcode.org/react-native-viewpa ...

  10. 【转贴】Python处理海量数据的实战研究

    最近看了July的一些关于Java处理海量数据的问题研究,深有感触,链接:http://blog.csdn.net/v_july_v/article/details/6685962 感谢July ^_ ...