WCF基础介绍并创建简单应用程序

 更新时间:2022年1月24日 16:51  点击:429 作者:痕迹g

什么是WCF?

WCF, 英文全称(windows Communication Foundation) , 即为windows通讯平台。

windows想到这里大家都知道了 , WCF也正是由微软公司推出的这个一个玩意, 基于SOA的一个分布式应用程序框架和编程模型

(WCF 编程模型的目标实现也就是 :WCF服务、WCF客户端)

描述: WCF的特点

  • 1. 支持多种消息模式 (单向模式、请求/回复、双工)
  • 2. 支持多种传输协议和编码 (Http,tcp ,msmq等。)
  • 3. 支持事务,持久化。
  • 4. 统一,安全,可扩展。

关于WCF的基础知识

> WCF的服务结构

  • 协定: 确定消息格式, 服务类型及安全策略和网络协议。
  • 服务运行时: 处理服务运行中发生的各种行为
  • 消息传递: 描述消息的数据格式和交换模型。
  • 激活和承载: 用于发布WCF服务的寄主。

> 如何创建WCF 服务

打开Visual Studio 新建一个项目, 选择WCF 服务库创建并命名为 HelloWCF。

可以看到, 在创建该项目时, 系统默认为我们添加了一个Iservice1(接口) 和一个 service1(实现类)。

在Iservice1中, 可以看到该接口定义了 ServiceContract 特性, 接口方法中定义了 OperationContract 特性

这两类特性则归属于WCF中的服务协定。

*特性:

用来声明服务端定义的所有协定。 在C#中,所有特性类都是从Attribute类继承而来的,而且其名称都有Attribute后缀。用C#编写代码时,

一律用中括号来声明特性类,在ServiceContract定义中, 会发现后面跟着Attribute后缀,声明时省略Attribute后缀,这是建议的用法。

特性类的用途是为紧跟在它后面的目标元素提供设计行为。比如对某个字段声明了某个特性,则该特性的目标元素就是这个字段。目标元素可以是

程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植模块、参数、属性(Property)、返回值以及结构等。另外,目标元素还可以是其他特性类。

在CompositeType类中, 可以看到该类定义了DataContract特性, 与属性中定义了DataMember 特性 ,

而这类则属于WCF中的数据消息协定。

在我们的实际开发过程中, 需要用于数据交互的实体类, 则必须声明类及成员的数据协定, 声明的意义则表示该实体可以序列化。

注: 在WCF定义了DataMember的类成员, 无论是Public、Private, 它都可以被访问。

打开service1 类文件, 集成于Iservice1 的接口并且有具体实现, 在我们测试中, 则是利用客户端进行访问进行演示, 而下面,

要讲的技术一个关于终结点的概念。

> 终结点(EndPoint)

终结点用于指定网络通信的目标, 在应用程序中,可通过Config文件配置<endpoint>节点进行指定。

在终结点中, 含有3个很重要的概念, 俗称ABC, 也就是由地址(Address)、协定(Binding)、绑定(Contract)所组成。

  • Address : 用于发布服务的位置
  • Binding: 确定的某种通讯方式
  • Contact: 公开服务的指定类型

在刚才新建的WCF服务库中, 打开配置文件, 可以看到endpoint节点, 该节点则是用于发布WCF服务。

到现在为止, 只是介绍了WCF服务的一个简单组成, 那么既然是服务,肯定是要给别人用, 所以下一步就是, 需要一个寄主,

举个例子 : 就像地铁卡充值服务, 一般这个服务是独立的, 我们要去便利店也好, 药店或者地铁里面充值, 他们都提供

地铁卡充值服务,而这些充值地铁卡的地方, 可以简称为宿主(服务的承载)。

所以, 我们下一步就是为这个WCF服务创建一个寄主, 简单的例子, 我们以控制台的形式进行创建。

注: 实际上,WCF支持多种寄宿模式, windows应用程序, 控制台应用程序,IIS等。

> 选择右键, 新建一个控制台应用程序, 并命名为 WCFService

然后添加对HelloWCF的项目引用, 以及System.ServiceModel程序集的引用。

注:该编程模型封装在.NET框架的System.ServiceModel命名空间中。

将HelloWCF中的APP.config的 system.serviceModel节点复制到控制台的配置文件中。

打开Program文件, 编写以下代码, 用于启动WCF服务。

服务端的构建以及完成, 运行控制台项目, 打开此服务, 不要关闭, 下一步则是建立客户端应用程序,并且访问该WCF服务。

> 创建WCF客户端

1.打开Visual Studio , 新建一个windows窗体应用程序, 命名为: WcfClient

2. 选择项目引用, 右键添加服务引用, 此时回到我们的服务应用程序中, 找到服务的基地址, 在配置文件中复制该地址。

3.添加该地址的服用引用, 命名使用默认(实际开发过程中可根据服务的类型进行定义), 点击确定, 此时我们在Form1中

添加一个按钮, 用于测试访问服务,

4.双击进入, 创建该服务的实例, 调用接口实现的方法, 弹窗的形式显示结果。

5.测试结果, 成功的调用了WCF服务中的GetData()方法。

到此这篇关于WCF基础介绍并创建简单应用程序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持猪先飞。

原文出处:https://www.cnblogs.com/zh7791/p/6908841.html

[!--infotagslink--]

相关文章

  • JavaScript动态创建div属性和样式示例代码

    1.创建div元素: Javascript代码 复制代码 代码如下: <scripttypescripttype="text/javascript"> functioncreateElement(){ varcreateDiv=document.createElement("div"); createDiv.innerHTML="Testcreateadiveleme...2013-10-13
  • JS创建Tag标签的方法详解

    这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
  • 什么是cookie?js手动创建和存储cookie

    什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
  • PHP安装threads多线程扩展基础教程

    一、下载pthreads扩展下载地址:http://windows.php.net/downloads/pecl/releases/pthreads二、判断PHP是ts还是nts版通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说...2015-11-24
  • PS如何创建变形文字 ps给文字变形的方法

    PS怎么创建变形文字?ps中想要给输入的文字变形,该怎么调整文字的显示形态呢?下面我们就来看看ps给文字变形的方法,需要的朋友可以参考下 我们在图层上输入文字后,可以...2017-07-06
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • idea 无法创建Scala class 选项的原因分析及解决办法汇总

    这篇文章主要介绍了idea 无法创建Scala class 选项的解决办法汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • php创建无限级树型菜单

    写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.。 大概步骤如下: step1:到数据库取数据,放到一个数组, step2:把数据转化为一个树型状的数组, step3:把这个树型状的数组转为html代码。...2015-11-08
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Flex网页布局基础入门及实例教程

    Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。本教程我们来学习一下Flex布局的基本语法知识及运用实例。 网页布局(layout)是CSS的一...2016-09-14
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • 一文秒懂JavaScript DOM操作基础

    通过这篇文章帮助大家快速学习JavaScript DOM操作基础的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧...2021-04-30
  • Drupal模块开发之创建自己的钩子

    Drupal可以让第三方模块创建自己的钩子。在通常的实践中,有两种类型的钩子你可能想要创建,一种是内容修改类的钩子,一种是拦截类的钩子。 Drupal的钩子系统允许和模...2016-11-25
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • 从零开始的html教程(7):html表单基础之一

    一聚教程网 从零开始的html教程(7),html表单的基础,零基础也能轻松学会html,希望大家喜欢 一、html的表单 表单负责网页中用户输入数据采集的功能,利用<form>标签来定...2016-12-31
  • C#创建Windows服务的实现方法

    这篇文章主要介绍了C#创建Windows服务的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • javascript创建对象的几种模式介绍

    下面小编就为大家带来一篇javascript创建对象的几种模式介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-05-09
  • python基础之局部变量和全局变量

    这篇文章主要介绍了python局部变量和全局变量,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...2021-10-22
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25