WCF学习——构建第二个WCF应用程序(五)
一、创建数据服务
1.在“解决方案资源管理器”中,使用鼠标左键选中“WcfService”项目,然后在菜单栏上,依次选择“项目”、“添加新项”。
2.在“添加新项”对话框中,选择“Web”节点,然后选择“WCF 服务”项。
3.在“名称”文本框中,输入 BookService,然后选择“添加”按钮。如下图

4.Visual Studio 2015会同时添加一个IBookService接口文件。这个接口代码文件中的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WcfService
{
/// <summary>
/// 书籍协定
/// </summary>
[ServiceContract]
public interface IBookService
{
/// <summary>
/// 通过Id得到书籍信息
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[OperationContract]
Books GetBook(int Id);
/// <summary>
/// 得到所有书籍
/// </summary>
/// <returns></returns>
[OperationContract]
List<Books> GetList();
/// <summary>
/// 添加书籍
/// </summary>
/// <param name="books"></param>
/// <returns></returns>
[OperationContract]
int AddBook(Books books);
/// <summary>
/// 删除书籍
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[OperationContract]
int delBook(int id);
/// <summary>
/// 修改书籍
/// </summary>
/// <param name="book"></param>
/// <returns></returns>
[OperationContract]
int editBook(Books book);
}
}
5. 在“解决方案资源管理器中”中,定位BookService.svc.cs文件,双击在“代码编辑器”中打开,并编写如下代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WcfService
{
/// <summary>
/// 书籍服务协定实现
/// </summary>
public class BookService : IBookService
{
/// <summary>
/// 通过Id得到书籍信息
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Books GetBook(int id)
{
using ( BookShopPlusEntities book = new BookShopPlusEntities())
{
try
{
var books = (from s in book.Books
where s.Id == id
select s).SingleOrDefault();
//var bookss = book.Books.Where(e => e.Id == Id).SingleOrDefault();
return books as Books;
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 得到所有书籍
/// </summary>
/// <returns></returns>
public List<Books> GetList()
{
using (BookShopPlusEntities book = new BookShopPlusEntities())
{
try
{
var books = from b in book.Books select b;
return books as List<Books>;
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 添加书籍
/// </summary>
/// <param name="books"></param>
/// <returns></returns>
public int AddBook(Books books)
{
using (BookShopPlusEntities book = new BookShopPlusEntities())
{
try
{
book.Books.Add(books);
//保存到数据库
return book.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 删除书籍
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int delBook(int id)
{
using (BookShopPlusEntities book = new BookShopPlusEntities())
{
try
{
var books = book.Books.Where(e => e.Id == id).SingleOrDefault();
book.Books.Remove(books);
return book.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 修改书籍
/// </summary>
/// <param name="books"></param>
/// <returns></returns>
public int editBook(Books books)
{
using (BookShopPlusEntities book = new BookShopPlusEntities())
{
try
{
//得到一条数据
var bk = book.Books.Where(e => e.Id == books.Id).SingleOrDefault();
//进行修改
bk.Title = books.Title;
bk.Author = books.Author;
bk.PublishDate = books.PublishDate;
bk.UnitPrice = books.UnitPrice;
bk.TOC = books.TOC;
bk.Publishers.Name = books.Publishers.Name;
//提交
return book.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
}
}
}
6. 在菜单栏上,依次选择“调试”、“开始执行(不调试)”以运行服务。
7.打开一个浏览窗口,把地址(http://localhost:64501/BookService.svc)输入到游览器,然后按 Enter 键,可以看到该服务的 XML 架构。

8. 关闭浏览器窗口。
二、创建宿主程序
1.WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
2.在菜单栏上,依次选择“文件-->新建-->项目”,或者如下图在“解决方案资源管理器”中使用鼠标右键,弹出快捷菜单。

3.在“添加新项目”对话框中,展开 “Visual C#”和“Windows”节点,然后选择“控制台应用程序”模板。 在“名称”文本框中,输入 Hosting,然后选择“确定”按钮。 如下图。

4.我们可以通过代码的方式完成所有的服务寄宿工作。在“解决方案资源管理器中”中,定位到Program.cs文件,双击在“代码编辑器”中打开,并编写如下代码。下面的代码通过一个控制台应用对 BookService的寄宿的实现。关于配置方式参见前一文章。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WcfService;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Hosting
{
class Program
{
static void Main(string[] args)
{
//没有通过配置文件的方式启动程序
//提供服务的主机
using (ServiceHost host = new ServiceHost(typeof(BookService)))
{
//添加终结点
host.AddServiceEndpoint(typeof(BookService),new WSHttpBinding(),"http://127.0.0.1:9898/BookService");
//判断控制服务元数据和相关信息的发布
if(host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
//创建一个控制服务
ServiceMetadataBehavior metdata = new ServiceMetadataBehavior();
//控制服务元数据和相关信息的发布时使用Http/Get进行检索
metdata.HttpGetEnabled = true;
//http/Get请求的位置
metdata.HttpGetUrl = new Uri("http://127.0.0.1:9898/BookService/wcf");
//添加到主机中
host.Description.Behaviors.Add(metdata);
}
//添加一个事件
host.Opened += delegate
{
Console.WriteLine("BookService已启动,按任意键终止服务!");
};
//启动服务
host.Open();
Console.ReadLine();
}
}
}
}
在接下来的步骤中,将创建一个 窗体应用程序以使用该服务。
WCF学习——构建第二个WCF应用程序(五)的更多相关文章
- WCF学习——构建第二个WCF应用程序(四)
一.WCF服务端应用程序 1.创建WCF服务端应用程序项目 打开Visual Studio 2013,在菜单上点击文件->新建->项目->WCF服务应用程序.在弹出界面的" ...
- WCF学习——构建第二个WCF应用程序(六)
一.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据.若要创建客户端应用程序,你将另外添加一个项目,添加对该项 ...
- WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】
http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...
- WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...
- 1.WCF学习--创建简单的WCF服务
一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...
- WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】
WCF Interview Questions – Part 4 This WCF service tutorial is part-4 in series of WCF Interview Qu ...
- WCF 学习总结2 -- 配置WCF
前面一篇文章<WCF 学习总结1 -- 简单实例>一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在回 ...
- WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】
http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...
- WCF学习——构建一个简单的WCF应用(一)
本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些准备开始学习WCF的初学者提供一些帮助. 在这个例子中,我们将实现一个简单的计算器和传统的分布式通信框架一样,WC ...
随机推荐
- 在Adapter中如何关闭当前Activity
很多时候我们需要在点击adapter条目的时候关闭当前界面,把所点击条目的信息带到前一个界面,同时关闭当前界面. 这个 时候就需要在adapter对某一个点击事件做处理. 代码如下: holder.l ...
- 远程登录Linux服务器修改ssh端口
公司有部分服务器root密码被禁用,有部分没有禁用,禁用root的服务器需要通过tomcat用户登陆系统,切换至root修改端口,没有禁用的直接修改root密码: #-*- coding:utf-8 ...
- 分辨率、像素和PPI
屏幕尺寸是指屏幕对角线的长度,一般以英寸为单位,1英寸(inch)=2.54厘米(cm).传统意义上的照片尺寸也是这个概念.所以同样尺寸(指对角线)的屏幕,也可能长宽比率不同.像素(Pixel):是位 ...
- C#打开php链接传参然后接收返回值
php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate'] ...
- Iterator(es6)
1.任何数据结构只要部署了Iterator接口(本质是一个指针对象),也就是部署了Symbol.iterator属性,便可以完成遍历操作:数组原生就具备Iterator接口,就可以用for...of遍 ...
- 基于Groovy应用程序的spring boot
spring boot CLI 它是使用Spring Boot的最简单的和快速的的方法.他是一个基于Groovy脚本的命令工具.可以按照以下步骤安装次工具: 1.去spring官网下载 http:// ...
- 从LINQ开始之LINQ to Objects(下)
前言 上一篇<从LINQ开始之LINQ to Objects(上)>主要介绍了LINQ的体系结构.基本语法以及LINQ to Objects中标准查询操作符的使用方法. 本篇则主要讨论LI ...
- SQL Server中对存储过程的理解
数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL ...
- FPGA设计思想(持续更新)
一. 流水线设计 将原本一个时钟周期完成的较大的组合逻辑通过合理的切割后分由多个时钟周期完成.该部分逻辑运行的时钟频率会有明显对的提升,提高系统的性能用面积换速度 一个流水线设计需要4个步骤完成一个数 ...
- 为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?
首先介绍一下dojo的特性: 1.Dojo是一个符合AMD规范的企业级框架(dojo是一个重量级框架) 2.Dojo全面支持异步加载JS机制(即:支持通过require异步加载JS模块,通过defin ...