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

一、WCF服务应用程序与WCF服务库

  我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”。

WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类协定的定义,可以直接看到运行的效果。

WCF服务库,可以认为是一个包含WCF服务以及协定定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web/windows项目中应用的类库。考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。

  当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。

二、寄宿概述

  通过前面的介绍我们知道,WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。.net 提供了多种宿主供WCF运行,WCF还是非常灵活的。

WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。

三、创建WCF服务库为多种寄宿做准备

  • 北京找富婆

    天津找富婆

    河北找富婆

    山西富婆

    吉林找富婆

    辽宁找富婆

    内蒙古富婆

    浙江找富婆

    山东富婆

    上海找富婆

    安徽找富婆

    福建找富婆

    江西找富婆

    江苏找富婆

    河南找富婆

    湖北找富婆

    湖南找富婆

    广东找富婆

    广西找富婆

    重庆找富婆

    四川找富婆

    贵州找富婆

    云南找富婆

    西藏富婆

    陕西找富婆

    甘肃找富婆

    青海找富婆

    宁夏富婆

  • 1) 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序。在弹出界面的“名称”对应的文本框中输入“WcfServiceLib”,然后点击“确定”按钮。如下图。

    2) 把Visual Studio 2015自动生成的两个文件(IService1.cs、Service1.cs)删除。

    3)  鼠标右键查看项目属性。如下图所示。

    4) 查看WcfServiceLib项目的引用,我们会发现“WCF类库项目”与我们平时建立的 “类库项目”都是类库,只不过多了WCF的类库项目在新建时多了两个dll的引用(System.ServiceModel.dll、 System.Runtime.Serialization.dll)和一个自动生成的配置文件(该配置文件只用于调试时使用,在WCF寄宿以后会应用宿 主的配置文件与其他应用程序通信)。如下图。

    5) 服务端我们还和第一个教程一样(IBookService接口与BookSservice实现),创建IBookService接口。代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace WcfServiceLib
    {
    
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IBookService”。
    
        [ServiceContract]
        public interface IBookService
        {
            [OperationContract]
            string GetBook(string Id);
        }
    }

    6) 实现IBookService接口,代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text; 
    
    namespace WcfServiceLib
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“BookService”。
    
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 BookService.svc 或 BookService.svc.cs,然后开始调试。
        public class BookService : IBookService
        {
    
            public string GetBook(string Id)
            {
    
                int bookId = Convert.ToInt32(Id);
                Books book = SetBook(bookId);
                string xml = XMLHelper.ToXML<Books>(book);
                return xml;
    
            }
    
            public Books SetBook(int Id)
            {
                Books book = new Books();
                book.BookID = Id;
                book.AuthorID = 1;
                book.Category = "IBM";
                book.Price = 39.99M;
                book.Numberofcopies = 25;
                book.Name = "DB2数据库性能调整和优";
                book.PublishDate = new DateTime(2015, 2, 23);
                return book;
    
            }
        }
    }

    7) 由于Visual Studio 2015默认生成的app.config中的配置信息是以IService来写的配置,现在的为IBookService,所以配置文件有三处要修改.修改。如下图。

    修改后的配置文件。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" />
      </system.web>
      <!-- 部署服务库项目时,必须将配置文件的内容添加到
     主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 -->
    
      <system.serviceModel>
        <services>
          <service name="WcfServiceLib.BookService">
            <host>
              <baseAddresses>
                <add baseAddress = "http://127.0.0.1:8888/WcfServiceLib/BookService/" />
              </baseAddresses>
            </host>
            <!-- Service Endpoints -->
            <!-- 除非完全限定,否则地址相对于上面提供的基址-->
            <endpoint address="" binding="basicHttpBinding" contract="WcfServiceLib.IBookService">
              <!--
                  部署时,应删除或替换下列标识元素,以反映
                 用来运行所部署服务的标识。删除之后,WCF 将
                  自动推断相应标识。
              -->
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <!-- Metadata Endpoints -->
            <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
            <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- 为避免泄漏元数据信息,
              请在部署前将以下值设置为 false -->
              <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
              <!-- 要接收故障异常详细信息以进行调试,
              请将以下值设置为 true。在部署前设置为 false
              以避免泄漏异常信息 -->
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel> 
    
    </configuration>

    8) 在Visual Studio 2015中点击“F5“运行程序。效果如下图所示,则说明成功。

    9) 使用鼠标左键,双击GetBook方法,在ID值中输入5,如下图。

    10) 在输入完ID值之后,点击,调用按钮,如下图。在出现的提示信息框中点击“确定”按钮。

    11) 调用成功的结果。如下图。

    时间: 2024-10-29 05:01:51

    WCF学习之旅—WCF寄宿前的准备(八)的相关文章

    WCF学习之旅—WCF服务配置(十四)

    一.概述 我们在前面章节中讲了寄宿,在前面的实例中也用到了配置文件,这一篇主要讲讲如何在应用配置文件,提高WCF程序的灵活性.在编写WCF服务应用程序时,编写配置项也是其中一项主要工作,在前面的几个示例中我也使用过配置文件,通过配置文件来简化代码.WCF通过公开终结点,向客户端公开服务,包括服务的地址.服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型等.当我们把这些配置项写入到配置文件后,我们无需编译即可修改WCF的一些可变信息,提高了程序的灵活性. 注意: 1)在代码里写了配置,

    WCF学习之旅—WCF服务部署到IIS7.5(九)

    四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以依靠IIS来管理宿主进程的生命周期.在开发和使用的过程与Web Service非常相似. 1) 为WCF服务创建.svc文件 对于ASP.NET Web Service的每个服务都具有一个.asmx文件,客户端通过访问.asmx文件实现对相应Web Service的调用.WCF服务与Web Service类似,每个WCF服务也具有一个对应的文 件,其

    WCF学习之旅—WCF服务部署到应用程序(十)

    五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下图. (2)添加 System.ServiceModel.dll 的引用. (3)添加 WCF 服务类库(WcfServiceLib)的项目引用. (4)创建宿主程序,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Serv

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

    一.WCF概述 1) 什么是WCF? Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务.终结点可以是从服务终结点请求数据的服务客户端.简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流.一些示例方案包括: 处理企业事务的安全服务. 将当前数据

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

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对应的文本框中输入“SCF.WcfService”,然后点击“确定”按钮.如下图. 第二步 , 安装Entity Framework 1)  使用NuGet下载最新版的Entity Framework 6.1.3.在解决方案资源管理器中——>在项目SCF.WcfService上鼠标右键单击——>弹出

    WCF学习之旅—基于ServiceDebug的异常处理(十七)

    WCF学习之旅—WCF中传统的异常处理(十六) 二.基于ServiceDebug的异常处理 从前面的示例中,可以看到客户端捕获了异常,这是我们处理异常的前提.为了有利于我们进行有效的调试,WCF提供了ServiceDebug Service Behavior.我们可以通过设置<serviceDebug includeExceptionDetailInFaults="True" />属性设为true,那么如果服务端抛出异常,WCF会简单得包装这个异常并把它置于Soap中Res

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

    WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持REST的WCF服务端程序,本文介绍如何调用上一篇文章介绍的RestFul服务端. 五.Windows客户端调用 为了强调REST的通用性,客户端不用WCF的形式调用服务,而是采用HttpWebResponse通过编程方式直接访问,消息格式我们选XML. 首先,我们使用C#来封装一个RestHelper类

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

    一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书籍管理系统(BookMgr). 这个示例就是一个非常简单的书籍管理系统,功能有:查询.修改.新增.删除(不包括安全.优化等相关问题).异常处理.WCF的增删改查和WinForm相差无几.WCF只是把具体“实现”写在“服务端”,而“调用”放在了“客户端”. 二.BookMgr说明 1)Demo的 “服

    WCF学习之旅—WCF4.0中的简化配置功能(十五)

    六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提供一些默认配置功能的服务终结点.当然也包含默认的绑定和默认的服务行为.这一切都是为了简化配置过程,避免一 些不必要的错误. 下面我们就来通过代码示例来体验一下WCF4.0提供简化配置的功能. (1)默认终结点 默认终结点(Default Endpoints)指的是,如果开发人员没有为服务显示配置服务