WCF学习之旅目录

WCF学习之旅——第一个WCF示例(一)

WCF学习之旅——第一个WCF示例(二)

WCF学习之旅——第一个WCF示例(三)

WCF学习之旅—WCF概述(四)

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

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

WCF学习之旅—WCF第二个示例(七)

第五步,创建数据服务

  1. 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”、“添加新项”。
  2. 在“添加新项”对话框中,选择“Web”节点,然后选择“WCF 服务”项。
  3. 在“名称”文本框中,输入 BookService,然后选择“添加”按钮。如下图。

4.Visual Studio 2015会同时添加一个IBookService接口文件。这个接口代码文件中的代码如下:

  1. [ServiceContract]
  2.  
  3. public interface IBookService
  4. {
  5.  
  6. [OperationContract]
  7. string GetBook(string Id);
  8. [OperationContract]
  9. string AddBook(string book);
  10. [OperationContract]
  11. string EditBook(string book);
  12. [OperationContract]
  13. string Search(string Category, string searchString);
  14.  
  15. }

5. 在“解决方案资源管理器中”中,定位BookService.svc.cs文件,双击在“代码编辑器”中打开,并编写如下代码。

  1. public class BookService : IBookService
  2. {
  3. Entities db = new Entities();
  4. public string AddBook(string mbook)
  5. {
  6. try
  7.  
  8. {
  9. Books book = XMLHelper.DeSerializer<Books>(mbook);
  10. db.Books.Add(book);
  11. db.SaveChanges();
  12. }
  13.  
  14. catch (Exception ex)
  15. {
  16. return ex.Message;
  17.  
  18. }
  19.  
  20. return "true";
  21.  
  22. }
  23.  
  24. public string EditBook(string mbook)
  25. {
  26. try
  27. {
  28. Books book = XMLHelper.DeSerializer<Books>(mbook);
  29. db.Entry(book).State = EntityState.Modified;
  30. db.SaveChanges();
  31. }
  32. catch (Exception ex)
  33. {
  34. return ex.Message;
  35. }
  36.  
  37. return "true";
  38. }
  39.  
  40. public string GetBook(string Id)
  41. {
  42. int bookId = Convert.ToInt32(Id);
  43. Books book= db.Books.Find(bookId);
  44. string xml=XMLHelper.ToXML<Books>(book);
  45. return xml;
  46. }
  47.  
  48. public string Search(string Category, string searchString)
  49. {
  50. var cateLst = new List<string>();
  51. var cateQry = from d in db.Books
  52. orderby d.Category
  53. select d.Category;
  54. cateLst.AddRange(cateQry.Distinct());
  55.  
  56. var books = from m in db.Books
  57. select m;
  58. if (!String.IsNullOrEmpty(searchString))
  59. {
  60. books = books.Where(s => s.Name.Contains(searchString));
  61. }
  62.  
  63. List<Books> list = null;
  64. if (string.IsNullOrEmpty(Category))
  65.  
  66. {
  67. list = books.ToList<Books>();
  68. }
  69.  
  70. else
  71.  
  72. {
  73. list = books.Where(x => x.Category == Category).ToList<Books>();
  74.  
  75. }
  76. return XMLHelper.ToXML<List<Books>>(list);
  77.  
  78. }
  79.  
  80. }

6.  在菜单栏上,依次选择“调试”、“开始执行(不调试)”以运行服务。 此时将打开一个浏览窗口,并显示该服务的 XML 架构。

7. 在地址栏中,在 BookService.svc 的 URL 末尾处输入 Books,然后按 Enter 键。如下图。

8.  关闭浏览器窗口。

第六步,创建宿主程序

  1. WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
  2. 在菜单栏上,依次选择“文件-->新建-->项目”,或者如下图在“解决方案资源管理器”中使用鼠标右键,弹出快捷菜单。
  3. 在“添加新项目”对话框中,展开 “Visual C#”和“Windows”节点,然后选择“控制台应用程序”模板。 在“名称”文本框中,输入 Hosting,然后选择“确定”按钮。 如下图。
  4. 我们可以通过代码的方式完成所有的服务寄宿工作。在“解决方案资源管理器中”中,定位到Program.cs文件,双击在“代码编辑器”中打开,并编写如下代码。下面的代码通过一个控制台应用对 BookService的寄宿的实现。关于配置方式参见前一文章。
  1. using SCF.WcfService;
  2.  
  3. using System;
  4.  
  5. using System.Collections.Generic;
  6.  
  7. using System.Linq;
  8.  
  9. using System.ServiceModel;
  10.  
  11. using System.ServiceModel.Description;
  12.  
  13. using System.Text;
  14.  
  15. using System.Threading.Tasks;
  16.  
  17. namespace Hosting
  18.  
  19. {
  20.  
  21. class Program
  22. {
  23. // 无配置文件的启动程序
  24. static void Main(string[] args)
  25. {
  26. using (ServiceHost host = new ServiceHost(typeof(BookService)))
  27. {
  28. host.AddServiceEndpoint(typeof(IBookService), new WSHttpBinding(),
    "http://127.0.0.1:8888/BookService");
  29. if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
  30.  
  31. {
  32. ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
  33. behavior.HttpGetEnabled = true;
  34. behavior.HttpGetUrl = new Uri("http://127.0.0.1:8888/BookService/metadata");
  35. host.Description.Behaviors.Add(behavior);
  36. }
  37. host.Opened += delegate
  38.  
  39. {
  40. Console.WriteLine("BookService,按任意键终止服务!");
  41. };
  42.  
  43. host.Open();
  44. Console.Read();
  45.  
  46. }
  47.  
  48.  
  49. }

在接下来的步骤中,将创建一个 Windows 窗体客户端应用程序以使用该服务。

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

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

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

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

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

  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. 《转》Unity3D研究院之UGUI一个优化效率小技巧

    无意间发现了一个小技巧.如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题. 一般 ...

  2. 【转】iOS开发 -- Apple Pay

    技术博客原地址:http://www.cnblogs.com/dashunzi/p/ApplePay.html#top 原技术博客中有源码和视频,有感兴趣的朋友可以研究一下! 一.什么是Apple P ...

  3. Day 1:学习Windows Phone 使用 SQLite

    private void move(string fn) { StreamResourceInfo sr = Application.GetResourceStream(new Uri(fn, Uri ...

  4. 第三周作业(一):安装VS以及创建单元测试

    安装的时候找的是最新版本的VS2015,因为不想花钱也不想用破解版,所以用社区版本. 下了一个IOS文件,社区版VS2015,个人免费版,强行表示不用盗版来表现自己高尚的情操:D 放入虚拟光驱软件后, ...

  5. 关于MySQL 的LEFT JOIN ON的问题

    今天在查询视图时,遇到了一个问题. 因为mysq不能嵌套select的子查询.所以我把子查询建成了视图b,主查询通过left join on关联视图b ,形成视图a. 由于视图b中也有left joi ...

  6. router路由去掉#!的踩坑记

    项目中在研究去掉router#!的过程中的踩坑过程.

  7. Log4j按级别输出到不同文件

    log4j.properties 文件: log4j.logger.net.sf.hibernate.cache=debug log4j.rootLogger = error,portal_log,s ...

  8. 如何使用其他文件中定义的类Python

    我在文件a.py中定义了一个类class A(object),现在想在b.py中的类B中某个函数中创建一个A的对象,需要如何操作呢? 我在b的头加了import a.py然后使用语句 obj = A( ...

  9. DSY2748*音量调节

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  10. vim的配置与使用

    经历了一次source insight 一言不合就崩溃之后,决定还是花点时间好好配置和学习以下vim 于是找到大神的配置 https://github.com/humiaozuzu/dot-vimrc ...