WCF总结——宏观认识和简单实践

1.WCF是什么

WCF常和分布式系统以及面向服务(SOA)联系在一起,它可以使分布在不同服务器上的服务之间互相调用,访问。它提供了通信的模型和技术。

2.WCF基本概念

契约:

服务契约:可以看做是接口

数据契约:定义了在通信过程中用到的数据类型

服务:服务契约的实现类

宿主(托管):只有上面的东西,“服务”是不能运行和启动的。上述的契约和服务必须借助一个可执行的程序(Windows窗体应用程序,控制台应用程序等),才能启动服务,供外界调用

客户端:调用服务的一端。

3.WCF基本原理

Service Host:在上图中,左边是客户端,右边是服务端,我们看到在服务端中,服务寄宿在一个一个服务端程序中,当程序执行的时候便是一个进程,来运行服务。

EndPoint:终结点EndPoint包括三部分:ABC。A是服务发布的地址,B规定了通信的方式,是HTTP还是TCP等。C是契约,代表你要用的是哪个服务。

代理服务:客户端程序通过代理服务来访问服务。这里代理服务就是一个中介,实际过程中,客户端先和代理服务创建连接,再由代理服务于服务端创建连接。而不是客户端和服务端直接产生联系。这样,代理服务可以控制不同的客户端对服务端的访问,保证服务端的安全。

4.WCF实践

(1)建立契约和服务

契约和服务的建立很简单(可以简单看做接口,实现类和数据类型的建立)。

a.我们可以借助一定的“帮助”来建立,如在VS中,新建项目选择WCF服务库

b.如果不需要帮助,我们可以自己新建类库,契约是一个类库,服务是一个类库。

c.还有一种高级的帮助,就是VS中的新建项目下的WCF服务应用程序。它其中有一个.svc文件,并把它设置成起始页,只要F5运行程序。服务就可以执行了。所以,顾名思义WCF服务应用程序不同于WCF服务库,它是可以执行的。通过WCF的客户端测试工具可以直接调用该服务。

这里也注意在建立数据契约和服务契约时用到的两个引用:

using System.Runtime.Serialization; 【DataContract】【DataMember】

using System.ServiceModel;【ServiceContract】【OperationContract】

(2)选择宿主,配置终结点,发布服务

a.IIS

把上述的svc文件发布到IIS上,打开,获得终结点中的地址A,对于IIS这种方式,B只能是HTTP绑定类型。

b.Windows应用程序

(i)在应用程序中引用契约类库和服务类库.

(ii)建立宿主

(iii)配置终结点和元数据(通过代码或配置文件)

如果只配置了终结点,那么客户端发现不了服务,客户端必须引用服务端的契约类库,只有配置了元数据和服务行为,告诉客户端可以发现,怎么发现服务,那么客户端可以不用引用服务端的契约类库。

(iv)运行宿主程序,启动服务

(3)客户端调用

是否需要引用契约类库,根据你的服务端是否配置了元数据和服务行为,如果没有,就得引用。

a.添加服务引用,会自动生成代理类来调用

b.使用svcutil生成文件。

c.通过通道工厂。

5.WCF好处

6.参考资料

《WCF初接触实作 - Higel - 博客园》

《通过SvcUtil.exe生成客户端代码和配置 - cjfwu - 博客园 》

《WCF初接触实作之服务发布和使用》

上述几篇文章的里面有具体的代码,我已经实践过了,如果有什么问题我们可以交流啊。

有了上面的宏观认识和知识储备,接下来就是试着搭建一下我们项目中的WCF,ING……

时间: 2024-10-03 23:15:40

WCF总结——宏观认识和简单实践的相关文章

Android 设计随便说说之简单实践(合理组合)

上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示applist,和下载app.第二是运行环境,在Android平台,有androidsdk提供socket等API支持.因此将模块大体换发了5个模块.(当然了图片加载可以额外提出,用开源组件去做,但是这里为了说明如何设计,暂不提到.还有下载也可以利用开源组件)分别是如下: 模块1 UI模块,负责展示信息和用

SQL知识以及SQL语句简单实践

综述 大家都知道SQL是结构化查询语言,是关系数据库的标准语言,是一个综合的,功能极强的同时又简洁易学的,它集级数据查询(Data Quest),数据操纵(Data Manipulation),数据定义(Data Definition),数据控制(Data Control)于一体 即: SQL语言包含4个部分: ※ 数据定义语言(DDL),例如:CREATE.DROP.ALTER等语句 ※ 数据操作语言(DML),例如:INSERT(插入).UPDATE(修改).DELETE(删除)语句 ※ 数

Mysql 备份恢复的简单实践

一.备份: 进行mysql的安装目录: 使用./mysqldump -u root -h 127.0.0.1 -P 3306 -p mysql>trymysql.sql 输入密码,备份成功. 二.恢复 进行mysql. 创建数据库 create database trymysql; 进入数据库 use trymysql ; 恢复 source trymysql.sql Mysql 备份恢复的简单实践

GDB 程序调试简单实践

用了好久的GCC/G++ 却一直都没用过GDB调试过程序,有时程序不是很大,一般有错,直接看编译器编译结果就差不多知道错在哪儿了,或者使用codeblocks单步调试,甚至回到windows下面调试,但是总是不太方便,因此有必要看一下GDB调试方法和基本步骤. 下面是一个简单的演示: 首先创建一个有错误的代码,如下: 这个程序很简单,目的是接受用户的输入,并将用户的输入回应输出来. 但是这个程序的第17行有个错误,使用了未初始化的字符指针name,因此编译运行后会出现段错误,如下: 下面利用GD

ZooKeeper分布式锁简单实践

ZooKeeper分布式锁的实现原理 在分布式解决方案中,Zookeeper是一个分布式协调工具.当多个JVM客户端,同时在ZooKeeper上创建相同的一个临时节点,因为临时节点路径是保证唯一,只要谁能够创建节点成功,谁就能够获取到锁.没有创建成功节点,就会进行等待,当释放锁的时候,采用事件通知给客户端重新获取锁资源.如果请求超时直接返回给客户端超时,重新请求即可. 代码实现为了更好的展现效果,我这里设置每个线程请求需要1s,请求超时时间为30s. 首先我们先写一个测试类,模拟多线程多客户端请

Remoting简单实践

一句话概括 remoting是微软的一种实现在不同的.net应用程序中进行分布式通信的技术 重要概念 原理大致是首先客户端通过remoting通道来获取服务器对象代理,通过序列化与反序列方式实现数据交互 远程对象:服务器端的实现类必须继承MarshalByRefObject,进而实现remoting通信,支持跨程序域的访问 远程对象的激活 主要分为服务器端激活和客户端激活 交互前都需要激活相应的实例,便于调用方法  通道:  主要tcp,http,ipc这几种方式  tcp通过二进制传输,传输效

php各种设计模式简单实践思考

前言 我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的.所以基本的显得额外重要,即是算法和数据结构,再就是好的设计模式了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快! 单例模式 单例模式特点 $_instance 必须声明为静态的私有变量 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去

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

一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体"实现"写在"Service端",而"调用"放在了"Client端".觉得有帮助别忘了点个赞哈,

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

wcf技术交流,同学习,同进步. 群号:89718412 一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体“实现”写在“Service端”,而“调用”放在了“Client端”.觉得有帮助别忘了点个赞哈,谢谢哦~ 二