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 属性