zoukankan      html  css  js  c++  java
  • 简述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 属性

  • 相关阅读:
    5.2.9.字符设备驱动代码实践2
    5.2.8.字符设备驱动代码实践1
    5.2.7.字符设备驱动工作原理2
    5.2.6.字符设备驱动工作原理1
    带参宏定义的思考
    重读gets()与is函数的用法
    地址/指针和字符串
    总体来说,require_once 肯定要比 require 性能好
    auto_prepend_file与auto_append_file使用方法
    经验分享:CSS浮动(float,clear)通俗讲解
  • 原文地址:https://www.cnblogs.com/xiaoweigogo/p/7798268.html
Copyright © 2011-2022 走看看