一、创建数据服务

  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应用程序(五)的更多相关文章

  1. WCF学习——构建第二个WCF应用程序(四)

    一.WCF服务端应用程序 1.创建WCF服务端应用程序项目 打开Visual Studio 2013,在菜单上点击文件->新建->项目->WCF服务应用程序.在弹出界面的" ...

  2. WCF学习——构建第二个WCF应用程序(六)

    一.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据.若要创建客户端应用程序,你将另外添加一个项目,添加对该项 ...

  3. WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】

    http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...

  4. WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】

    http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...

  5. 1.WCF学习--创建简单的WCF服务

    一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...

  6. WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】

    WCF Interview Questions – Part 4   This WCF service tutorial is part-4 in series of WCF Interview Qu ...

  7. WCF 学习总结2 -- 配置WCF

    前面一篇文章<WCF 学习总结1 -- 简单实例>一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在回 ...

  8. WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】

    http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...

  9. WCF学习——构建一个简单的WCF应用(一)

    本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些准备开始学习WCF的初学者提供一些帮助. 在这个例子中,我们将实现一个简单的计算器和传统的分布式通信框架一样,WC ...

随机推荐

  1. C#超简单方法实现两个richtextbox控件滚动条同步滚动

    此文章属于作者原创,转载请注明,谢谢 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果. 当然,传统的方法重载控件或者 ...

  2. UVa1025 (DAG上的dp)

    这是紫书上的第一个dp哈. 1.状态定义:dp[i][j]---->到时刻i的时候(出发的时候时刻为0,约定时间为时刻time),从j号车站开往N号车站,在车站等待的最少的时间. 2.这个人当前 ...

  3. 《JavaScript高级程序设计》里对 call() 和 apply() 的解释 (116页)

    每个函数都包含两个非继承而来的方法:apply()和call().这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值. apply(): 方法接受两个参数:一个是在其 ...

  4. JS 浏览器cookie的设置,读取,删除

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...

  5. General Thread States

    对于实践中可能出现的各种General Thread States 以下列表描述了与常规查询处理关联的线程状态值,而不是更复杂的活动,例如复制. 其中许多仅用于在服务器中查找错误. after cre ...

  6. Java中设计模式之生产者消费者模式-4

    引言 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区.其中一个是生产者,用于将消息放入缓冲区:另 ...

  7. intel hex 格式的几个链接

    intel hex GENERAL: INTEL HEX FILE FORMAT Intel Hex文件格式说明 - starspace - 博客园 C# Hex文件转bin文件 - bule - 博 ...

  8. Eclipse中如何显示代码行

    方法一 快捷键方式: 按住 Ctrl + F10 选择 show  Line Numbers 方法二 手动操作: Window -- Prefences -- General -- Editors - ...

  9. 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

    前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...

  10. Java NIO学习笔记一 Java NIO概述

    Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供 ...