WCF回顾一、基本概念和应用场景
一、WCF描述
wcf是一款基于面向服务的架构的通讯框架平台,在分布式框架中得到了广泛使用。 wcf入门非常简单,只要花几分钟就能编写一个完整的wcf程序,而实际上WCF是概念非常多的一门技术,需要花很大精力去深入研究。
二、WCF优点
1、将各种通讯技术进行整合
WCF是对于 Web Service,Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合
表示层可以基于 soap XML传输 和 rest http调用
传输层可以基于 http https tcp pipe msmq (在都可以满足需求的情况下,我个人比较喜欢tcp从性能和灵活性方面的综合考虑)
2、采用面向服务去实现,让编程变的更简单
软件开发方法:面向过程编程—>面向对象—>面向组件开发—>面向服务架构
面向服务优势:
一个项目中,如果存在多种风格的技术、第三方DLL或者两种技术不能同一个系统下运行 这种情况下将变的难以维护和编码不雅,但是把这些功能全部分离到的一个服务项目,通过一个个的服务接口去调用,多个环境去发布,既做到了解耦又提高了内聚, 代码在烂眼不见心不烦。
三、WCF基本概念
WCF程序分为服务端和客户端,WCF程序通过宿主托管到进程中,读取配置并启动服务,客户端通过代理类实现调用。
1契约 :
(1)服务契约: 暴露给客户端的一组接口,需要加上[ServiceContract]特性,客户端才可以调用该服务。
(2)操作契约: 函数名加上[OperationContract],服务中才可以调用该函数。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value); [OperationContract]
CompositeType GetDataByData(DataClass dc); }
(3)数据契约: 客户端和服务端传递的class需要加上属性[DataContract]标注为数据契约,在class的成员属性加上DataMember特性标注共享成员
注意:即使不添加特性DataContract,仍然默认为DataContract,只有数据契约可以偷懒不写
[DataContract]
public class DataClass{
[DataMember]
public double TotalPrice { get; set; } }
(4)消息契约:这个比较有意思,网上说法很多,关于应用场景的相当少
我的理解:首先消息契约和数据契约一样都支持流,返回流还能带附带其它信息,这些数据契约一样做的到只是多几个属性摆了。
消息契约重点在消息这两个字,数据的特性是一致性,你是 “1” 我也是 “1” ,但是消息不同我可以说成是 “1” 也可以说成是 ”一“,区别在于多样化。
消息契约是将传输数据 指定到 soap head或者soap body,可以通过order对多个head或者body中的数据进行排序,还可以自定义一些消息格式让传输格式多样化,支持更多设备的接收, 还可以对head进行加密等操作。
数据契约所有数据都在一起,我们无法控制生成的soap是什么样子。
注意每种契约都有各自的特性参数,这里就不介绍了
2地址
每个服务可以有多种传输协议,每种传输协议只能有一个调用地址
比如 :
http://192.168.1:800/Service1
net.tcp://localhost:8080/Service1
3代理
项目右键添加服务引,输入服务地址 便可以很方便的生成代理服务,也可以使用工具生成代理或者手写。
4、WCF配置文件
分为三块 bindings 、services和 behaviors
(1)services:
可以有多个service ,一个service代表一个服务,
一个service可以多个endpoint, endpoint作用主要是 地址、契约、绑定
endpoint举个例子比如 绑定http 地址就是 http://192.168.1.1:80/service1 服务契约就是 IService
(2) behaviors:
一个service可以有一个behavior ,约定服务的行为,比如服务出错是否输出详细错误,是否显示元数据等(元数据就是WCF浏览页)
(3) bindinds:
一个service可以有一个bingding用于配置服务的传输协议和传输参数的设置等。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="tcpBind" portSharingEnabled="true" transferMode="Buffered" >
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
</security>
</binding>
</netTcpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyServiceTypeBehaviors" name="WcfService.SayService">
<endpoint binding="netTcpBinding" bindingConfiguration="tcpBind" contract="WcfService.ISayService" />
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<!--发布元数据,发布前删除-->
<serviceMetadata httpGetEnabled="true" />
<!--输出错误,发布前删除-->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
===============================================================纯属个人理解=========================================================
WCF回顾一、基本概念和应用场景的更多相关文章
- MQ(1)---消息队列概念和使用场景
消息队列概念和使用场景 声明:本文转自:MQ入门总结(一)消息队列概念和使用场景 写的很好,都不用自己在整理了,非常感谢该作者的用心. 一.什么是消息队列 消息即是信息的载体.为了让消息发送者和消息接 ...
- kubernetes1.9管中窥豹-CRD概念、使用场景及实例
欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 默认读者有kubernetes基础概念的背景知识,因此基础概念例如有状态.pod.Replica Sets.Deployments.state ...
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推 ...
- ThreadLocal概念以及使用场景
ThreadLocal概念以及使用场景 根据自身的知识深度,这里只限于自己使用和学习的知识点整理,原理的解释还需要再沉淀. 该文章从项目开发中举例,希望能帮助到各位,不了解ThreadLocal的朋友 ...
- WCF分布式开发步步为赢(14):WCF安全编程--基本概念
WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好地理解WCF安全相关知识,我把WCF安全机制主要知识点整理 ...
- [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)
场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...
- [转]RabbitMQ入门教程(概念,应用场景,安装,使用)
原文地址:https://www.jianshu.com/p/dae5bbed39b1 RabbitMQ 简介 RabbitMQ是一个在AMQP(Advanced Message Queuing Pr ...
- redis(redis概念,运用场景,如何操作基本数据类型)
什么是redis:Nosql一种缓存数据库 redis可以干什么:redis可以减轻对数据库的请求压力如果不使用缓存:客服端->控制层->业务层->dao层使用缓存:客服端-> ...
- zookerper入门、核心概念和使用场景
zookeeper是一个分布式程序的高性能协调服务,提供集中式信息存储服务,数据存储于内存中,类似文件系统的树形结构,高吞吐量和低延时,集群高可靠,基于zookeeper可以实现分布式统一配置中心.分 ...
随机推荐
- 通过sqlplus导出数据到csv
例子 [oracle@localhost ~]$ cat data.sqlset echo offset feedback offset linesize 100set pagesize 0set s ...
- Revit中如何自定义快捷键
最佳的绘图方式是左手键盘,右手鼠标,使用快捷键将大大提高绘图效率,Revit同样提供了自定义绘图工具快捷键的功能(Revit2011及以后版本),有两种方式调出自定义快捷键窗口,第一种是Revit窗口 ...
- SFTP+OpenSSH+ChrootDirectory设置
账户设置 SFTP的账户直接使用Linux操作系统账户,我们可以用useradd命令来创建账户. 首先建立3个要管理的目录: 1 2 3 mkdir /home/sftp/homepage mkd ...
- linux crontab 文件位置和日志位置
一.文件位置 位置一般在/var/spool/cron/下,如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab 文件丢失: 二.日志文件位置 默认情况下,cron ...
- 【ASP.NET MVC 5】第27章 Web API与单页应用程序
注:<精通ASP.NET MVC 3框架>受到了出版社和广大读者的充分肯定,这让本人深感欣慰.目前该书的第4版不日即将出版,现在又已开始第5版的翻译,这里先贴出该书的最后一章译稿,仅供大家 ...
- EXCEL 保存之前校验
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 'MsgBox "开始检测数据.. ...
- nodejs express 框架解密1-总体结构
本文是基于express3.4.6的. 1.express 代码结构为: bin/express 是在命令行下的生成express 框架目录文件用的 lib/express 是框架的入口文件 lib/ ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- 不停止MySQL服务增加从库的两种方式
不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...
- CKEditor4.1和CKFinder2.3.1 for Mvc4最新 破解版,结合 打造"帅"的编辑器 For .Net
CKEditor4.1+CKFinder2.3.1 FOR MVC4 最新破解版:(2013-3-23) baidu share: http://pan.baidu.com/share/link?sh ...