什么是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服务发布到WCF客户端访问。

 

WCF入门, 到创建一个简单的WCF应用程序的更多相关文章

  1. [WCF学习笔记] 我的WCF之旅(1):创建一个简单的WCF程序

    近日学习WCF,找了很多资料,终于找到了Artech这个不错的系列.希望能从中有所收获. 本文用于记录在学习和实践WCF过程中遇到的各种基础问题以及解决方法,以供日后回顾翻阅.可能这些问题都很基础,可 ...

  2. [转载]我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

  3. 我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

  4. IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序

    前言:本篇博文是本人阅读国外的IOS Programming Tutorial的一篇入门文章的学习过程总结,难度不大,因为是入门.主要是入门UIImagePickerController这个控制器,那 ...

  5. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  6. 【转】WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  7. WCF服务二:创建一个简单的WCF服务程序

    在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...

  8. 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址

    一.创建WCF服务器 1.创建WCF服务器的窗体应用程序 打开VS2010,选择文件→新建→项目菜单项,在打开的新建项目对话框中,依次选择Visual C#→Windows→Windows窗体应用程序 ...

  9. 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之三

    原文:Getting Started with Sencha Touch 2: Build a Weather Utility App (Part 3) 作者:Lee BoonstraLee is a ...

随机推荐

  1. 蓝桥杯-等额本金-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  3. 分布式开放消息系统(RocketMQ)的原理与实践(转)

    转自:http://www.jianshu.com/p/453c6e7ff81c 分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回 ...

  4. 分针网—IT教育:调皮的JavaScript

    JavaScript是一门有趣的语言,不仅有趣而且调皮,不同的内核的浏览器在解析的时候表现会有些差异,今天主要是抛砖引玉,和大家一起讨论一些在实际开发中比较常见但同时可能并没有过于在意的JavaScr ...

  5. tail命令

    tail命令用来取文件后几行,默认显示后10行.有多个FILE,每个都带有一个头文件名称. 语法: tail [OPTION]... [FILE]... 选项: -n#:取文件后#行,n可省略: -c ...

  6. win10 64位下装Virtual Box安装Linux(centOS)配置联网

    第一步:安装VritualBox 百度"VritualBox"下载安装即可: 第二步:下载Linux镜像系统并安装 这里写出我参照的博客,很详细,我就不累赘了! 原文地址:http ...

  7. SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强

    本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候, ...

  8. scala和java的区别

    scala写程序跟说话一样,都是要把你的思想描述出来,但是scala最大的问题是api的符号标记太复杂, 很多都好难看懂,某些语法太过复杂,上手还是有些难度的.java很规范,但是代码太多,写逻辑很 ...

  9. Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  10. jmeter IP欺骗功能实现

    使用过loadrunner的同学,应该都了解有个IP欺骗功能,jmeter遇到类似需求怎样实现呢? 环境:windows7,jdk1.8,jmeter3.1 使用IP欺骗功能前提是本地有多个可用IP, ...