WCF开发实战(一)---创建服务器类

定义:

WCF(WindowsCommunication Foundation):一系列支持数据通信的应用程序框架。

内容包含三部分:地址(Adress)、绑定(Binding)和契约(Contract),简称ABC,即利用服务模型创建软件通信功能而遵循的三个步骤。

实例:

第一步:“创建WCF服务器”

VS中“文件”->“新建项目”->“项目类型”->"Visual C#"->"WCF"->"WCF服务库"

在WCF服务库的项目名称为“Services”。

点击确定后,在解决方案中自动为我们生成两个类文件‘IService.cs“和”Service.cs“。

删除这两个实例文件。

第二步:创建Book实体类

在“解决方案窗口”中,我们右击Services项目名,添加一个类,类名为“Book.cs”.

Book类:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Services
{
    [DataContract]//标签作用是保证此类在WCF调用中能够被序列化,我们在Book类上面加入DataContract标签,在每个需要徐磊话的成员变量上加入【DataMember】标签,这两个标签使用的时候需要导入usingSystem.Runtime.Serialization命名空间。

    public class Book//服务中传输的复杂的数据类型Book
    {
        [DataMember]
        public string BookNO;
        [DataMember]
        public string BookName;
        [DataMember]
        public decimal BookPrice;
    }
}</span>

第三步:创建服务接口

声明对外发布的类和方法:添加类,类名为:IBookService.cs

IBookService类:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Services
{
    [ServiceContract]
    //在接口上面,我们定义了serviceContract标签,此标签代表此接口及实现此接口的类都是对外发布的Service类,在每个需要对外发布的方法上都加上【OperationContract】标签,意识外部可以访问到此方法,【ServiceContract】和【OperationContract】这两个标签需要导入using System.ServiceModel命名空间。
    public interface IBookService
    {
        [OperationContract]
        void AddBooks(Book book);

        [OperationContract]
        List<Book> GetAllBooks();

        [OperationContract]
        void RemoveBook(string id);
    }
}</span>

第四步:创建实现服务接口的类

实现上面我们定义的服务接口,实现对Book的添加、删除和检索的具体功能:添加类:BookService.cs

BookService类:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace Services
{
    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]//这个标签代表这个类采用了SingleTone(单类模式)来生成对象。
    public class BookService : IBookService//对于IBookService接口的具体实现
    {
        List<Book> _Books = new List<Book>();
        public void AddBooks(Book book)
        {
            book.BookNO = Guid.NewGuid().ToString();
            _Books.Add(book);
        }

        public List<Book> GetAllBooks()
        {
            return _Books;
        }

        public void RemoveBook(string id)
        {
            Book book = _Books.Find(p => p.BookNO == id);
            _Books.Remove(book);
        }
    }
}</span>

第五步:配置WCF服务

首先我们要“启动”项目,生成Services.dll

到目前为止,我们建立好了WCF,如何让WCF服务主机理解我们编写的服务类,并能够运行我们编写的服务。我们需要在App.config里面注册一下我们的WCF服务。右击App.config文件,选择”编辑WCF配置“弹出窗体:

从上图中,我们可以看到界面中暴露两个对外的终结点(外部可以访问到类或借口),其中下面一个是元数据终结点,用来向外提供服务信息的终结点。而另一个(即上面的终结点),是向外公布我们编写的[ServiceContract]的类,但我们可以看到它的Contract还是我们在第一步中删掉的Services.IService1这个终结点。不仅如此,在右侧的服务中还依旧是我们在第一步中删除的Services.Service1服务。这说明虽然在第一步中我们删除了那两个自动生成的类文件,但配置文件中仍没有删除这两个类文件的配置信息。

如何改变?

单击左侧的“服务” -> "Service.Servicel" 在右侧的Name,弹出"服务类型浏览器",按步骤来:

这样我们就可以把对外公司的服务改变为我们刚编写的服务了。

“服务” -> “Services.BookService”->“终结点”,单击第一个“空名称”,从右边的“终结点属性”中的Contract中我们可以看到,这里的Contract仍然用的是Services.IService1。

按照上面的说法,找到此WCF服务项目编译出来的Services.dll,双击找到对应的ServiceContract点击确定就可以了。

约定类型浏览器中显示“Service.IBookService”.

保存配置文件,我们对WCF配置算是完成了。

第七步:运行WCF进行测试

在VS2013中为我们提供了测试WCF的工具,按F5启动WCF会出现两个东西。

“测试客户端”从WCFSVCHost中取得WCF服务的元数据,解析为右侧的“服务结构树”,从这里我们可以看到此WCF服务为我们提供了一个服务契约“IBookService”,此服务契约中对外提供了三个可调用的方法,我们可以调用。









时间: 2024-12-25 04:56:39

WCF开发实战(一)---创建服务器类的相关文章

WCF 开发实战系列 (一)

也许有读者会说,为什么要谈 WCF?近期不是 Web API 比较热门?在这个手机.Devices 当道的现在,究竟有什么地方会需要使用到 WCF 呢? 的确,现在访间你能找到的课程,或者您可能参与某项目的实践 (网页应用程序.手机 APP 也好),你需要的通常也都是提供 Services 层,而这个 Services 层通常也就是 Web API.那么,难道 WCF 就无用武之地?其实也不是,看什么情况用什么技术,有一些地方是 Web API 无法做到的 前言 也许有读者会说,为什么要谈 WC

微软ASP.NET 电商网站开发实战 MVC6 +HTML5 +WCF+WebAPI+NoSQL+mongoDB+Redis+Core视频 代码 面试题

<微软ASP.NET 电商网站开发实战 MVC6 +HTML5 +WCF+WebAPI+NoSQL+mongoDB+Redis+Core 视频 代码 面试题 >下载网盘:https://yunpan.cn/cP7SNIjgJYYjA  访问密码 7fc6 微软特邀讲师 徐雷FrankXuLei 2016 授课 更新:.NET Core 1.0高并发框架+面试题更新:高性能缓存 Redis.NoSQL面试题 安装,增删改查 RedisHelper帮助类 购物车 会话服务器更新:REST WebA

Eclipse rcp 项目开发实战2 : 创建插件开发工程

输入工程名称,其它默认即可 输入创建插件工程相关信息,Rich Client Application 要选择Yes 来创建RCP工程,其它数据一般默认即可. 选择模板,也就是Demo,在这一步选择完成后,其实就可以直接Finish了. 最后一步,输入名字,包名和应用的类的名称 一个简单地插件工程就已经创建完成. 启动工程,第一次启动有三种方法, 6.1 选择工程,右键Run As -- Eclipse Application 即可, 6.2 打开mf文件, 下拉选择,Launch an Ecli

React Native Android原生模块开发实战|教程|心得|如何创建React Native Android原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看iOS篇的点这里<React Native iOS原生模块开发>). 我平时在用React Native开发App时会

React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691432) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看Android篇的点这里<React Native Android原生模块开发>). 我平时在用React Nativ

React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息.为大家精心准备的React Native视频教程公布了,大家现能够看视频学React Native了. 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得.来分享给大家,但实在抽不开身.今天看了一下日历发现立即就春节了.所以就赶在春节之前将这篇博文写好并公布(事实上是两篇

Swift游戏实战-跑酷熊猫 02 创建熊猫类

原文:Swift游戏实战-跑酷熊猫 02 创建熊猫类 要点: 如何继承SKSpriteNode :子类必须调用SKSpriteNode的一个指定构造器 init(){ super.init(texture:texture,color:UIColor.whiteColor(),size:size) } 设置场景的背景颜色: self.backgroundColor = SKColor(red:113/255,green:197/255,blue:207,alpha:1) 熊猫类实例化以及定位 @l

Swift游戏实战-跑酷熊猫 06创建平台类以及平台工厂类

这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SKSpriteNode的数组.将数组里面的对象横向拼接在一起组成一个完整的平台.同时计算出平台的宽度 onCreate(arrSprite:[SKSpriteNode]){ for platform in arrSprite{ platform.position.x=self.width self.a

asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模板,本文主要讲解如何创建这个后台模板,本文创建的后台模板不集成到项目内部,只是静态html页面.后台模板是系统开发必须的,一般小公司有个3套后台模板就够用了.本项目后台模板主要是jquery easyui插件创建的,不需要美工设计就可以创建出来,而且效果还可以,具体效果图如下: 这个版面的缺点是,只能适应2层