博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF学习之旅—第三个示例之四(三十)
阅读量:6481 次
发布时间:2019-06-23

本文共 4751 字,大约阅读时间需要 15 分钟。

       上接

             

            

          在上一篇文章中我们创建了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配置文件如下:

       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
channelFactory = new ChannelFactory
("WSHttpBinding_IBookService")) { IBookService proxy = channelFactory.CreateChannel(); using (proxy as IDisposable) { textBoxMsg.Text = proxy.Search(txtCategory.Text, string.Empty); List
books = XMLHelper.DeSerializer
>(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”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 。

 

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

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

 

图1

 

图2

 

图3

 

转载地址:http://grfuo.baihongyu.com/

你可能感兴趣的文章
POJ 2255 Tree Recovery (二叉树)
查看>>
HDU 1026 Ignatius and the Princess I
查看>>
There are two ways for Datatable download as excel
查看>>
TextBox客户端JS赋值 后台获取(转载)
查看>>
PCA误差
查看>>
烦人的数据不一致问题到底怎么解决?——通过“共识”达成数据一致性
查看>>
抽象类详解
查看>>
《Oracle高性能自动化运维》一一2.2 队列锁(Enqueue Lock)
查看>>
《jQuery Mobile入门经典》—— 2.3 使用JavaScript完成功能
查看>>
java.lang.UnsupportedOperationException的解决方法
查看>>
SharePoint 2013 安装配置(3-2)
查看>>
让Erlang服务器后台运行
查看>>
APUE笔记七
查看>>
天兔监控安装
查看>>
python笔记-正则表达式
查看>>
Java二进制指令代码解析
查看>>
我的Python学习记录
查看>>
quzatz --Could not load org.quartz.spi.Trigge...
查看>>
qml实现窗口的拖拽效果
查看>>
Centos安装Mysql
查看>>