WCF学习之旅—WCF第二个示例(七)
WCF学习之旅目录
三、创建客户端应用程序
若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据。
在第一个步骤中,你将 Windows 窗体项目添加到解决方案中,并将其设置为启动项目。
第一步,创建客户端应用程序
- 在菜单栏上,依次选择“文件”、“添加”、“新建项目”。
- 在“添加新项目”对话框中,展开 “Visual C#”节点,选择“Windows”节点,然后选择“Windows 窗体应用程序”。
- 在“名称”文本框中,输入 WinClient,然后选择“确定”按钮。 如下图。

4. 在解决方案资源管理器中,选择 WinClient项目节点。
5.在菜单栏上,选择“项目”、“设为启动项目”。
第二步,添加服务引用
- 在菜单栏上,依次选择“项目”、“添加服务引用”。
- 在“添加服务引用”对话框中,将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服务中的书籍列表。 如果希望通过该服务公开其他数据,则可以修改实体数据模型以包括数据库中的其他表。
在下一个可选步骤中,将学习如何筛选服务返回的数据。
四、添加筛选功能
在此步骤中,将在应用程序中添加根据书籍的类型筛选书籍数据的功能。
- 在解决方案资源管理器中,选中“FrmBook.cs”文件,在弹出的右键菜单中选择“打开”,或者使用鼠标左键双击。
- 将工具箱中的 Lable 控件、TextBox控件和 Button 控件添加到窗体。 其中在Label中填上“类型”,Button的中填上“查询”。
- 打开 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 > )
{ book = gridBooks.SelectedRows[].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("");
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("");
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;
}
}
}
WCF学习之旅—WCF第二个示例(七)的更多相关文章
- WCF学习之旅—WCF第二个示例(五)
二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...
- WCF学习之旅—WCF第二个示例(六)
第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...
- WCF学习之旅—第三个示例之五(三十一)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) WCF学习 ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
随机推荐
- C#接口等基础知识
- 该不该在C#中使用var关键词
作为一个并不勤快的程序猿,在项目开发过程中总是想尽办法少写代码,对var关键词的使用自然不会放过,几乎在每个能使用var的地方都用了var,对此,很多朋友同事给出了不同的建议,觉得能不使用var关键词 ...
- 配置gradle.properties
在一些项目中会分拆app 和 lib , 这时候引用support的时候,一旦更改版本会出现需要同步更改两个地方的问题.这种情况,可以通过配置gradle.properties实现替换. 在项目编译过 ...
- bzoj1103树状数组水题
(卧槽,居然规定了修改的两点直接相连,亏我想半天) 非常水的题,用dfs序(而且不用重复,应该是直接规模为n的dfs序)+树状数组可以轻松水 收获:树状数组一遍A(没啥好骄傲的,那么简单的东西) #i ...
- Java|今天起,别再扯订阅和回调函数
编程史上有两个令人匪夷所思的说辞,一个是订阅,一个是回调函数. 我想应该还有很多同学为“事件的订阅”和“回调函数”所困扰,因为事情本来就不应该按这个套路来解释. 多直白,所谓的“回调函数”你完全可以线 ...
- java分享第十八天( JAVA利用enum结合testng做数据驱动示例)
数据驱动是做自动化测试中很重要的一部分,数据源的方案也是百花八门了,比如利用外部文件,直接在@DataProvider中写死等等,我们今天介绍一下利用enum来做数据源,先来看一下enum的写法: p ...
- Python 爬虫5——爬取并下载网页指定规格的图片
看完上篇文档之后,我们对于正则表达式已经有了基本的了解,其实学习最有效的办法就是带着问题和目的,这里我们假设有一个目标:获取某个网页上指定规格的图片的链接地址,并下载到本地. 一.实现步骤: 1.在浏 ...
- 解析文件+AcitonBar展示:
//项目效果:
- Java 清除数组相同元素
定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组.代码如下: import java.util.*; public class demo1 { public static void mai ...
- Mysql 学习笔记
创建表: create table testtable( id_ bigint not null AUTO_INCREMENT, name varchar(75) null, vmid varchar ...