上接WCF学习之旅—第三个示例之一(二十七)

              WCF学习之旅—第三个示例之二(二十八)

             WCF学习之旅—第三个示例之三(二十九)

          在上一篇文章中我们创建了WCF服务端应用程序,在这一篇文章中我们来学习如何创建WCF的服务端寄宿程序与客户端调用程序。

关于如何寄宿可以参考以下文章WCF学习之旅—WCF寄宿前的准备(八), WCF学习之旅—WCF服务部署到IIS7.5(九),WCF学习之旅—WCF服务部署到应用程序(十),WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一),WCF学习之旅—WCF服务的WAS寄宿(十二),WCF学习之旅—WCF服务的批量寄宿(十三)

具体步骤见下面。

七、创建WCF服务端寄宿程序

  1. WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
  2. 我们在BookMgr.Hosting项目中通过配置方式完成所有的服务寄宿工作,下面的代码是通过一个控制台应用对 BookService的寄宿的实现。关于配置方式参见前一文章。
  3. 如果在运行的过程中会出现以下错误信息:“在服务“BookService”实现的协定列表中找不到协定名称“BookMgr.Contracts.IBookService”。则回到BookMgr.Contracts项目中修改接口文件代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;namespace BookMgr.Contracts
{[ServiceContract]public interface IBookService{[OperationContract]string Add(string bookInfo);[OperationContract]string Edit(string bookInfo);[OperationContract]string Get(string bookId);[OperationContract]string Delete(string bookInfo);[OperationContract]string Search(string Category, string searchString); }
}

4. BookMgr.Hosting 中的App.config配置文件如下:

<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /></configSections><entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /><providers><provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /></providers></entityFramework><connectionStrings><add name="BookEntities" connectionString="metadata=res://*/BookModel.csdl|res://*/BookModel.ssdl|res://*/BookModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=Test;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup> <system.serviceModel><diagnostics><messageLogging logEntireMessage="true" logKnownPii="false" logMalformedMessages="true"logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /><endToEndTracing propagateActivity="true" activityTracing="true"messageFlowTracing="true" /></diagnostics><behaviors><serviceBehaviors><behavior name="metadataBehavior"><serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8088/BookService/metadata" /><serviceDebug includeExceptionDetailInFaults="True" /></behavior></serviceBehaviors></behaviors> <services><service behaviorConfiguration="metadataBehavior" name="BookMgr.Service.BookService"><endpoint address="http://127.0.0.1:8088/BookService" binding="wsHttpBinding"contract="BookMgr.Contracts.IBookService" /></service></services></system.serviceModel>
</configuration>

5. BookMgr.Hosting中的Program.cs的代码如下:

using BookMgr.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Text;
using System.Threading.Tasks;namespace BookMgr.Hosting
{class Program{static void Main(string[] args){try{using (ServiceHost host = new ServiceHost(typeof(BookService))){host.Opened += delegate{Console.WriteLine("BookService,使用配置文件,按任意键终止服务!");};host.Open();Console.ForegroundColor = ConsoleColor.Yellow;foreach (ServiceEndpoint se in host.Description.Endpoints){Console.WriteLine("[终结点]: {0}\r\n\t[A-地址]: {1} \r\n\t [B-绑定]: {2} \r\n\t [C-协定]: {3}",se.Name, se.Address, se.Binding.Name, se.Contract.Name); }Console.Read();}}catch (Exception ex){Console.WriteLine(ex.Message);}}}
}

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

八、创建客户端Windows应用程序

  1. 在菜单栏上,依次选择“文件-->添加-->新建项目”。
  2. 在“添加新项目”对话框中,展开 “Visual C#”节点,选择“Windows”节点,然后选择“Windows 窗体应用程序”。
  3. 在“名称”文本框中,输入 BookMgr.Client,然后选择“确定”按钮。 如下图。

4. 在解决方案资源管理器中,添加一些引用,如下图。       5. 在菜单栏上,选择“项目”、“设为启动项目”。

6. 在“解决方案资源管理器”窗口中,选中“BookMgr.Client”项目,弹出右键菜单,选择“添加—》新建项”。        7. 在“Windows Forms”节点下,选择“Windows窗体”,新建一个FrmBook.cs文件。如下图。       8. 在FrmBook窗体界面中按下图,进行拖放窗体控件。

九、添加筛选功能

在此步骤中,将在应用程序中添加根据书籍的类型筛选书籍数据的功能。

  1. 在解决方案资源管理器中,选中“FrmBook.cs”文件,在弹出的右键菜单中选择“打开”,或者使用鼠标左键双击。
  2. 将工具箱中的 Lable 控件、TextBox控件和 Button 控件添加到窗体。
  3. 打开 Button 控件的快捷菜单,选择“查看代码”,然后在 btnSearchCategory_Click事件处理程序中添加以下代码:
 private void btnSearchCategory_Click(object sender, EventArgs e){try{using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>("WSHttpBinding_IBookService")){IBookService proxy = channelFactory.CreateChannel();using (proxy as IDisposable){textBoxMsg.Text = proxy.Search(txtCategory.Text, string.Empty);List<Books> books = XMLHelper.DeSerializer<List<Books>>(textBoxMsg.Text);gridBooks.DataSource = books;}}}catch (Exception ex){textBoxMsg.Text = ex.Message;}}

4. 在菜单栏上,依次选择“调试”和“启动调试”以运行应用程序。

5.  在红框中的文本框中,输入 IBM,然后使用鼠标点击“查询”按钮。 将仅显示来自 类型为IBM 的书籍。如下图。

现在,你有了一个可以使用的应用程序,该应用程序将显示 BookService服务中的书籍列表。 如果希望通过该服务公开其他数据,则可以修改实体数据模型以包括数据库中的其他表。

注:如果在进行这一步骤中的编码过程中,出现了以下异常错误信息:

错误信息:

通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

光看上面的错误信息无法判断到底是怎么回事,进行调试,查看WCF内部暴露的错误信息,如下

无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。

这个异常,最后我找到出错的原因是:由于BookMgr.Hosting项目缺少对EntityFramework.SqlServer.dll的引用。

解决方法:为BookMgr.Hosting项目通过nuget添加上EntityFramework包,如下图一。原来的引用图如下图二,添加引用之后,如下图三。

图1

图2

图3

转载于:https://www.cnblogs.com/chillsrc/p/6072675.html

WCF学习之旅—第三个示例之四(三十)相关推荐

  1. WCF学习之旅—基于Fault Contract 的异常处理(十八)

       WCF学习之旅-WCF中传统的异常处理(十六) WCF学习之旅-基于ServiceDebug的异常处理(十七) 三.基于Fault Contract 的异常处理 第二个示例是通过定制Servic ...

  2. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅-第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  3. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅-WCF服务部署到IIS7.5(九) WCF学习之旅-WCF服务部署到应用程序(十) WCF学习之旅-WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  4. WCF学习之旅—实现支持REST客户端应用(二十四)

    WCF学习之旅-实现REST服务(二十二) WCF学习之旅-实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...

  5. WCF学习之旅(一)---Hello World.

    WCF学习之旅(一)---Hello World. 看了一些关于WCF的资料,从实例入手.记录自己学习WCF的过程. 从最简单的Hello World入门. 下图是我的solution及项目. 项目名 ...

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

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

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

    一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终 ...

  8. WCF学习之旅—请求与答复模式和单向模式(十九)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...

  9. WCF学习之旅—WCF寄宿前的准备(八)

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有"WCF 服务应用程序"和"WCF服务库". WCF服务应用程序,是一个可以执行的程 ...

最新文章

  1. DELL R710 服务器内存排错
  2. 教你实现双十一商品标签自动归类(附数据模板)
  3. 【深度学习】深入浅出卷积神经网络及实现!
  4. 一线大厂Java开发所需掌握的技能要点汇总
  5. 升级MAC OX上的Python到3.4
  6. 从零写一个编译器(九):语义分析之构造抽象语法树(AST)
  7. leetcode 121
  8. JVM架构和GC垃圾回收机制详解
  9. 阿里P8架构师谈:MongoDB、Hbase、Redis等NoSQL优劣势、应用场景
  10. Swift编码总结8
  11. 定损是保险公司定还是4s店定的?
  12. IntelliJ IDEA 2021 for Mac(最好的java开发工具)正式版支持m1芯片
  13. urlrewrite 规则报错
  14. Session使用方法详解
  15. 想要学习C++,就必须要学习C语言吗?
  16. 计算机专业必须用英语口语要求,哪些专业需要英语口语考试
  17. Flex TLF 相关知识
  18. 肠道菌群失衡的症状、原因和自然改善
  19. 接口分析--详细解读微博接口获取
  20. 有哪些JAVA设计模式呢?

热门文章

  1. 一文读懂单目视觉SLAM分类方法~基于概率框架和非概率框架
  2. java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!
  3. 推荐系统遇上深度学习(八)--AFM模型理论和实践
  4. ROS MATLAB 启动
  5. linux 线程的运行时间吗,Linux下巧用ps得到运行线程个数和线程启动时间
  6. 复练-关于面试的科技树-简历的提升、问答环节
  7. php执行先后顺序_PHP程序执行的过程原理
  8. ROS-OccupancyGrid学习笔记
  9. php 获取视频首帧,从视频中提取特定帧的最快方法(PHP/ffmpeg/anything)
  10. Android Shader类简介之渲染图像示例