简述WCF、WebService、Socket

1、wcf有一个ABC,简单说一下ABC是什么?wcf全称是什么?Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口
在WCF 框架中,各个Application之间的通信是由Endpoint来实现的。Endpoints是WCF实现通信的核心要素
WCF支持了HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,最基本的通信机制是SOAP(Simple Object Access Protocol 简易对象访问协议),这就保证了系统之间的互操作性,即使是运行不同的上下文中

Address: Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF service的调用者如何找到这个Endpoint(端口)(Endpoint由三部分组成:Address(地址),Binding(协议绑定),Contract(契约))

Binding实现在Client和Service通信的所有底层细节。比如Client与Service之间传递的Message是如何编码的—— text/XML, binary,MTOM;这种Message的传递是采用的哪种Transport——TCP, Http, Named Pipe, MSMQ;
只有在Client具有一个与Service端完全匹配的 Endpoint,我们才能调用这个Service

契约有几种?,他们都有什么用途
在WCF中,契约分为四种,它们分别为:
用于定义服务操作的服务WCF契约:Service Contract
这种级别的契约又包括两种:ServiceContract和OperationContract
ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用,而OperationContract用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。
用于自定义数据结构的数据WCF契约:Data Contract
数据契约也分为两种:DataContract和DataMember
DataContract用于类或者结构上,指示 WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。
用于自定错误异常的异常WCF契约:Fault Contract
FaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。
用于控制消息格式的消息WCF契约:Message Contract
简单的说,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。

WCF 支持多种通信协议 Http/Https 、TCP/UDP、MSMQ、命名管道、对等网、消息可达性、事务流等
WCF 可以与ASP.NET 集成、共享一个上下文(HttpContext),
WS也可以与Asp.net集成,但是不能共享一个上下文(HttpContext),
WCF 支持多种消息传输格式 :text,binary,mtom,Json 等。
WCF 支持多种会话模式:单向、双向、请求/响应。
WCF 支持REST 。
WCF的可配置性比WS强,比如安全性
WCF可以是有状态的,并支持事务。

socket:通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,通信原理:
服务端:
1、创建Socket对象,用来监听端口,并让客户端来连接
2、绑定一个端口和IP
3、开始侦听端口
4、开始接受客户端的连接,跟客户端连接后
5、跟客户端进行收发消息
6、关闭Socket
客户端:
1、创建Socket对象
2、对网络上某一个服务器的某一个端口向服务器发出请求,连接到服务器端,跟服务端连接后
3、跟服务器进行收发消息
4、关闭Socket

什么是WebService?
Web service是一个平台独立的,基于可编程的web的应用程序,它向外界暴露出一个能够通过
Web进行调用的API,用于开发分布式的互操作的应用程序。

在什么情况下你应该使用Web service。
关于客户端与服务器的通信问题,一个完美的解决方法是使用HTTP协议来通信。
不论两个程序的平台和编程语言是什么。
因为任何运行Web浏览器的机器都在使用HTTP协议。同时,当前许多防火墙也配置为只允许HTTP连接。

Socket与WebService区别?
socket是系统层面的东西,可以完成TCP,UDP等协议之间的通信。 
WebSevice是应用层面的东西,是使用Socket + HTTP 协议 的一种规范。

socket 用来实现网络层。各层需要我们自己在程序里实现。 
例如端口可以自己定义 、数据包的定义、 数据包的加密解密等

而webService实现了应用层的工具,他基于的服务为http协议,通过服务器才可以发布出去。 
这样内部的端口的定义、数据包的定义和数据包的加密解密都做好了,所以我们就直接可以用了。 
webService 内部数据格式为xml格式、由于基于http协议,所以可以不受防火墙的影响。 
因为他的通信协议和我们浏览网页的协议是相同的。

WebService原理:
这里我们将发布web service的机器称为服务端,而将调用web service的机器称为客户端。
首先服务端将发布web 服务。
客户端调用步骤:
step 1: 加入web 应用,将刚才发布的web服务加入,这时生成了上述web服务在本地的一个代理,我们假设为WebProxy。
step 2: 客户端调用之前首先实例化一个该代理的对象,然后调用发布的方法
step 3: 客户端将调用信息包括方法名和参数加入到soap消息中通过http传送给web service服务端
step 4: 服务端从soap消息中获得调用信息,然后执行方法,将返回结果加入到soap消息中然后通过http传回
step 5: 客户端代理得到这个soap消息后解析处结果返回给调用客户端方法

webservice下的两种验证方式,
一.通过集成windows身份验证
通过集成windows方式解决webservice的安全问题是一个很简洁,并且行之有效的解决方案,该方案的优点是比较安全,性能较好,当然因为与windows紧密的结合到了一起,缺点自然也很明显了,第一,不便于移植,第二,要进行相关的配置部署工作(当然我们也可以用代码来操作IIS,只不过比较麻烦,最近一直做自动化部署,所以一讲到配置马上就会联想到怎么去自动部署)
具体怎么做呢?
服务器端:配置IIS虚拟目录为集成windows身份验证
客户端:
Service1 wr = new Service1(); //web service实例  
wr.Credentials = new NetworkCredential("administrator","123"); //用户名密码  
lblTest.Text = wr.Add(2,2).ToString(); //调用Add的 web service方法 
二.使用 SoapHeader(SOAP 标头)自定义身份验证
SoapHeader 多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘,体可以实现哪些东西大家有想法可以留言一起交流.
SoapHeader 使用步骤: 
(1) 创建继承自 System.Web.WebServices.SoapHeader 的自定义 SoapHeader 类型。 
(2) 在 WebService 中创建拥有 public 访问权限的自定义 SoapHeader 字段。 
(3) 在需要使用 SoapHeader 的 WebMethod 上添加 SoapHeaderAttribute 访问特性。SoapHeaderAttribute 构造必须指定 memberName 参数,就是我们在第二步中申明的字段名称。 
(4) 生成器会自动为客户端生成同名的自定义 SoapHeader 类型,只不过比起我们在 WebService 端创建的要复杂一些。同时还会为代理类型添加一个 soapheaderValue 属性

时间: 2024-10-11 10:26:43

简述WCF、WebService、Socket的相关文章

微软 BI ssis 中的 script task中用代码直接调用 WCF / Webservice

背景: 在普通的C#项目中,可以直接调用 WCF / Webservice: 在微软BI的 ssis中,有 webservice任务组件,也可以直接调用简单的 WCF / Webservice; 偶这边的情况是,后端的 WCF中用的反射,所以在 ssis中的webservice任务组件中,死活不能识别 WCF对应的方法. 所以只能在ssis的 script task组件中,用纯代码的方式来调用WCF服务. 就这样,可能还是有问题:可能会碰到 不能识别 System.ServiceModel节点的

(15)Visual Studio中使用PCL项目加入WCF WebService参考

原文 Visual Studio中使用PCL项目加入WCF WebService参考 Visual Studio中使用PCL项目加入WCF WebService参考 作者:Steven Chang 2015/01 APP在应用时经常会用到WebService服务,在Xamarin中若同时要让iOS与Android叫用WebService时, 除了分别在iOS与Android中叫用WebService外, 还可以使用PCL项目(portable library class,中文叫可携式类别库),

转 WCF WebService区别

下面我们来详细讨论一下二者的区别.Web Service和WCF的到底有什么区别. [1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互.WSDL来实现服务接口相关

WCF和Socket

WCF的全称是:Windows Communication Foundation.它是建立在Web Service架构上的一个全新的通信平台.它使用相同的基础结构和 API 来创建应用程序,这些应用程序可与同一计算机系统上或驻留在另一家公司内并通过 Internet 访问的系统上的其他应用程序进行通信.从本质上来说,它是一套软件开发包,是微软公司推出的符合SOA思想的技术框架.WCF为程序员提供了丰富的功能,并且WCF对产业中的标准协议进行了封装和定义,它把程序员从繁琐的通信.格式编码中解放出来

Socket通信简单实例(WCF调用Socket)

服务端: 控制台程序监听 1 /// <summary> 2 /// Server 3 /// </summary> 4 class Program 5 { 6 static Socket serverSocket; 7 static Socket clientSocket; 8 static Thread thread; 9 10 static void Main(string[] args) 11 { 12 IPEndPoint ipep = new IPEndPoint(IP

VS2008非托管C++调用wcf(WebService)服务

在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用.不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码,编译出Sproxy.exe,这个工具可以根据wsdl文件来生成非托管的代理类.这个代理类还需要配合一些头文件才能一起使用,这个相关的头文件都包含在ATL Server的源代码内. 1.第一步需要使用sproxy.exe工具来生成代理类.在vs2008以前的版本,比如vs2005,本身就带有这个命令,

菜鸟学习WCF笔记-概念

背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神指正. 本章意在对Windows通信编程涉及到的相关词汇进行一个大概的理解不深究. 参考:http://baike.baidu.com/view/1140438.htm?fr=aladdin(不得不说百度百科,维基百科等资料很丰富),<WCF全面解析>. WCF介绍 Windows Communi

用Spring.Services整合 thrift0.9.2生成的wcf中间代码-复杂的架构带来简单的代码和高可维护性

参考页面: http://www.yuanjiaocheng.net/CSharp/csharp-class.html http://www.yuanjiaocheng.net/CSharp/csharp-variable.html http://www.yuanjiaocheng.net/CSharp/Csharp-data-types.html http://www.yuanjiaocheng.net/CSharp/cshart-value-reference-type.html http:

我们一起学习WCF 第一篇初识WCF(附源码供对照学习)

前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰.但是通过项目对wcf的运用在脑海里面也算有了初步的模型.今天我就把我从开始wcf所遇到的困难以及解决方案一点点记下来,可能还有很多不足之处那我们一起共同学习.在学习之前我们有必要初步的看下百度百科对wcf的解释,让我们心中有这一个概念,然后建立项目,然后再次看概念,然后在去更深层的建立项目,然后再去理解这样反复的去做我相信可以做好wcf.那么下面我就会从初识wcf,wcf消息