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 ...
随机推荐
- RabbitMQ学习-1
转载自:http://blog.csdn.net/anzhsoft/article/details/19563091. 1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced ...
- Java中的Object、T(泛型)、?区别
因为最近重新看了泛型,又看了些反射,导致我对Object.T(以下代指泛型).?产生了疑惑. 我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味 ...
- 【JQuery基础知识/statusCode(状态码)】---初学者必备
今天,给大家分享一下JQuery的基础知识,简单介绍一下JQuery高级_Ajax,和我们常见的一些statusCode(状态码)~~~ 如果存在错误,请大家多多指正留言~小女子在此谢过! 一.JQu ...
- IPv6,AppStore 审核不是唯一选择它的原因
为什么选择 IPv6?因为更快的 InternetIPv6 更快有两个原因.第一点,像 iOS.MacOS.Chrome 和 Firefox 这样的主流的操作系统或者浏览器,在它们使用 IPv4 连接 ...
- 在Eclipse如何实现在xml文件实现代码提示
通常我们创建xml文件时, 总会在编辑代码的时候不能像编辑Java文件那样进行自动提示或者补全.其实这个是可以实现的,下面我就以struts2.xml进行示范: 1.点击"winbdows& ...
- .nomedia文件的作用
.nomedia文件的作用:应用中的图片不被系统图库扫描. 一般开发的应用中会缓存一些图片到本地,不想让系统图库扫描到应用的图片或者不想对用户浏览图片造成影响. .nomedia文件放在任何一个文件夹 ...
- 016 多对多关联映射 单向(many-to-many)
一般的设计中,多对多关联映射,需要一个中间表 Hibernate会自动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联 多对多的关联映射,在实体类中,跟一对多一样,也是 ...
- 源码阅读—Iterator接口和LIstIterator接口
在继续看ArrayList源码之前,先了解Iterator接口和ListIterator接口,下篇文章详细讲解ArrayList是如何实现它们的. 我们知道,接口只是一种规范,当继承接口并实现其中的方 ...
- poi合并单元格同时导出excel
poi合并单元格同时导出excel POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet. 跨第1行第1个到第2个单元格的操作为 sheet ...
- VR全景智慧城市,完美的将虚拟与现实结合
很多人都粗浅的认为,VR虚拟智慧城市只是简单的将智慧城市和虚拟现实相结合的产物,这样的VR虚拟智慧城市看起来更像是个VR内容产品,而非城市建设成果.但是我们换个角度来思考的话,现在很多VR虚拟智慧城市 ...