WCF系列(一)BasicHttpBinding 和 WsHttpBinding 的不同点

aaaaaaaaaaaaaaaaaa

 

WCF系列(一)【翻译】BasicHttpBinding 和 WsHttpBinding 的不同点

2010-02-21 12:23 by Virus-BeautyCode, 20206 阅读, 7 评论, 收藏, 编辑

 

原文地址:Difference between BasicHttpBinding and WsHttpBinding

 

1、简介

  WCF引入了很多的绑定和协议。本文重点讨论两个协议,BasicHttpBinding和WsHttpBinding,他们看起来很相似,但是却有很大的不同。因此,我们首先看一下他们的不同点,然后通过一个小项目看看他们到底有什么不同。

  作者还总结了400多个.NET相关的话题,例如:WCF,WPF,WWF,Ajax,Core .NET,SQL Server,Architecture等等。

  下载地址:/Files/virusswb/SampleDotNetInterviewQuestionBook.zip

2、预备知识

  如果你第一次接触WCF,可以通过下面的链接了解一下相关的知识。在本文就不讲述WCF的基础知识点了:

  • Windows Communication Framework (WCF) - Part 1
  • Windows Communication Framework (WCF) - Part 2

3、BasicHttpBinding和WsHttpBinding的不同点

  如果非要用一句话概述BasicHttpBinding和WsHttpBinding的不同的话,那就是WsHttpBinding支持WS-Security specifications,WS-Security specifications具有扩展web service的能力。

  下面的表格式是对两者在安全、兼容性、可靠性和SOAP版本方面的比较。

  

CriteriaBasicHttpBindingWsHttpBinding
Security supportThis supports the old ASMX style, i.e. WS-BasicProfile 1.1.This exposes web services using WS-* specifications.
CompatibilityThis is aimed for clients who do not have .NET 3.0 installed and it supports wider ranges of clients. Many of the clients like Windows 2000 still do not run .NET 3.0. So older version of .NET can consume this service.As its built using WS-* specifications, it does not support wider ranges of client and it cannot be consumed by older .NET version less than 3 version.
Soap versionSOAP 1.1SOAP 1.2 and WS-Addressing specification.
Reliable messagingNot supported. In other words, if a client fires two or three calls you really do not know if they will return back in the same order.Supported as it supports WS-* specifications.
Default security optionsBy default, there is no security provided for messages when the client calls happen. In other words, data is sent as plain text.As WsHttBinding supports WS-*, it has WS-Security enabled by default. So the data is not sent in plain text.
Security options
  • None
  • Windows – default authentication
  • Basic
  • Certificate
  • None
  • Transport
  • Message
  • Transport with message credentials

 

 

  两者之间最大的不同你一定已经注意到了,那就是安全。默认情况下,BasicHttpBinding发送的是明文数据,而WsHttpBinding发送的是加密和更加安全的数据。为了证明这一点,我们新建两个服务,一个使用BasicHttpBinding,一个使用WsHttpBinding,然后详细查看一下他们的安全方面。

  我们创建一个小例子,看看basicHttpBinding是如何明文发送数据的,wsHttpBinding是如何加密数据的。

  说明:默认情况下,使用basicHttpBinding的时候,安全是没有启用的。换句话说,它很像以前的webservice,也就是.asmx。但是不意味着我们不能启用安全。稍后,我会写一篇关于basicHttpBinding启用安全的文章。

  

4、通过5步比较他们的不同点

  为了它们之间实际的不同点,我们创建一个小工程。在工程中,创建两个服务,一个使用basicHttpBinding,一个使用wsHttpBinding。

  

  第一步:使用basicHttpBinding创建一个服务,system.serviceModel配置如下

  

复制代码
<system.serviceModel>
    <services>
      <service name="WCFBasicHttpBinding.Service1" behaviorConfiguration="WCFBasicHttpBinding.Service1Behavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="basicHttpBinding" contract="WCFBasicHttpBinding.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFBasicHttpBinding.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
复制代码

 

 

  第二步:创建一个WsHttpBinding的服务,配置如下

  

复制代码
<system.serviceModel>
    <services>
      <service name="WCFWsHttpBindingHttps.Service1" behaviorConfiguration="WCFWsHttpBindingHttps.Service1Behavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="wsHttpBinding" contract="WCFWsHttpBindingHttps.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFWsHttpBindingHttps.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
复制代码

 

  第三步:我们不创建任何新函数,就是用默认创建的两个函数,如下

  

复制代码
public class Service1 : IService1
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    }
复制代码

 

 

  第四步:服务已经创建好了,我们创建一个消费服务的客户端。在这里,我们创建一个WebApplication,添加两个引用,一个是service reference,WsHttpBinding;另外一个是web reference,BasicHttpBinding。请记住,在你右键添加引用的时候,通过service reference添加WsHttpBinding,通过web reference添加BasicHttpBinding。

  

  

  我们在webapplication的default页面上添加两个button,一个调用HTTP Service,另外一个调用wshttp service。下面是它们如何调用服务的GetData方法。

  

  第五步:到这里我们准备完成这个项目,到了嗅探的时候了,看看数据在客户端和两个服务之间是如何传输的。我们下载并使用HTTP数据记录器,IE Inspector。我们将一个一个的点击button,来记录数据的传输。你将会看到在basicHttpBinding的情况下,数据明文的通过xml发送;在wsHttpBinding的情况下,数据被加密发送。

  

  总之,尽量避免使用BasicHttpBinding。

5、什么时候使用BasicHttpBinding,什么时候使用WsHttpBinding

  如果你希望有向后兼容的能力,并且支持更多的客户端,你可以选择basicHttpBinding,如果你确定你的客户端使用的是.NET 3.0甚至更高的话,你可以选择wsHttpBinding。

【Blog】http://virusswb.cnblogs.com/

【MSN】jorden008@hotmail.com

【说明】转载请标明出处,谢谢

 

 

转载于:https://www.cnblogs.com/wangsea/p/10302047.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D-光照系统

光照系统 1. Global Illumination&#xff08;全局光照&#xff09; GI,能够计算直接光&#xff0c;间接光&#xff0c;环境光以及反射光的光照系统。通过GI算法&#xff0c;渲染出光照效果更为真实的场景。 2. 直接光 从光源直接放出的光&#xff0c;通过Light组件实现。 …

Tomaso A.Poggio教授丨人工智能的下一个突破点在何处?

来源&#xff1a;图灵人工智能AI的成功故事在过去的25年中&#xff0c;尤其是在刚刚过去的十年中&#xff0c;AI&#xff0c;特别是机器学习&#xff0c;已经拥有了十足可观的进展。两个主要的成功故事第一个是AlphaGo。在虚拟的游戏世界中&#xff0c;AI绝对已经战胜了人类。A…

Unity3D-声音系统

声音 1.Unity3D支持的音频文件 mp3、ogg、wav、aif、mod、it、s3m、xm。 2.声音分为2D&#xff0c;3D两种 3D声音:有空间感&#xff0c;近大远小&#xff1b;2D声音&#xff1a;适合做背景音乐。 3.在场景中产生声音&#xff0c;主要有两个总要的组件&#xff1a; Audio …

当可解释人工智能遇上知识图谱

来源&#xff1a;知乎—机器学习小谈地址&#xff1a;https://zhuanlan.zhihu.com/p/386458680本文按照以下章节进行组织&#xff1a;1. 背景意义2. 基于路径的方法3. 基于嵌入的方法4. 总结与展望01背景意义1.1 什么是可解释性&#xff1f;首先&#xff0c;什么是可解释性。由…

Unity3D-C#脚本介绍

Unity3D脚本介绍 脚本就是附加在游戏物体上用于定义游戏对象行为的指令代码。Unity支持C#高级编程语言。 1.语法结构 using 命名空间; public class 类名&#xff1a;Monobehaviour {void 方法名&#xff08;&#xff09;{Debug.Log("调试信息.");print("调用…

JConsole连接远程linux服务器配置

1.在远程机的tomcat的catalina.sh中加入配置 (catalina.sh路径在tomcat/bin下面 如/usr/local/tomcat/bin) 1 if [ "$1" "start" ];then 2 JAVA_OPTS"$JAVA_OPTS -Djava.rmi.server.hostname192.168.10.98 -Dcom.sun.management.jmxremote"…

缺缺缺!IoT行业的“芯”选择是什么?

来源&#xff1a;北京物联网智能技术应用协会“最初&#xff0c;没有人在意这场灾难&#xff0c;直到这场灾难和每个人息息相关。”这是电影《流浪地球》的开头&#xff0c;预示着一场即将来临的危机。如今&#xff0c;这句话正在现实中应验&#xff0c;不过&#xff0c;这次遭…

Unity3D-相关函数功能

函数功能 1.每隔固定时间执行一次&#xff0c;时间间隔固定&#xff08;0.02s&#xff09;,时间间隔可以修改。 适用性&#xff1a;适合对物体作移动&#xff0c;旋转等物理操作。 函数执行不受渲染影响。 private void FixedUpdate() {Debug.Log(Time.time); }设置更新频率&…

JMeter4.0以上 分布式测试报错 server failed start Listen failed on port

使用JMeter4.0做分布式测试的是否&#xff0c;我的电脑作为肉鸡&#xff08;执行机&#xff09;&#xff0c;双击jmeter-server.bat后显示失败 Found ApacheJMeter_core.jarUsing local port: 1888Server failed to start: java.rmi.server.ExportException: Listen failed on …

Unity-基本函数用法

1.常用组件 组件作用Transform存储个处理游戏对象的位置、旋转和缩放Mesh Filter显示网格Rigidbody刚体&#xff0c;使物体能在物理控制下运动Collider碰撞器&#xff0c;和刚体一起来是游戏对象发生碰撞Renderer渲染器&#xff0c;使物体在屏幕上显示出来Audio Source音频源&…

AI芯片的未来之战:“霸主”英伟达真就无人能挡了吗?

来源: AI前线作者:NICOLE KOBIE译者:王强英伟达&#xff0c;AI 芯片市场的统治者业内有一个传说&#xff0c;讲的是英伟达怎样从游戏和图形硬件转向了 AI 芯片市场的统治者 — 这个故事中有猫的身影。早在 2010 年&#xff0c;现任英伟达首席科学家 Bill Dally 有一天正与斯坦福…

计算机网络(一)-概述(补充)

一.概述 1.新型网络 1.1 基本特点&#xff1a; 网络用语计算机之间的数据传送&#xff1b;网络能够连接不同类型的计算机&#xff1b;所有的网络结点都重要&#xff0c;大大提高了网络的生存性&#xff1b;计算机在进行通信时&#xff0c;必须有冗余的路由&#xff1b;网络结…

费米悖论的三十种解释 | 观点

© David B. Mattingly来源:公众号利维坦&#xff08;ID&#xff1a;liweitan2014&#xff09;文:Ella Alderson译:Rachel校对:Yord原文:medium.com/predict/30-solutions-to-the-fermi-paradox-aaabfce56280我常常在思索&#xff0c;我们大多数人选择相信其他星球上存在生…

计算机网络(一)-概述

一.计算机网络 &#xff08;一&#xff09;计算机网络概述 1. 概述 1.1 计算机网络是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 1.2 互联互通&#xff0c;自治的计算机集…

json数组格式问题

---恢复内容开始--- 使用jsonserver来模拟后台数据接口时犯了一个很低级的错误 找了很久没有发现有什么不对劲的地方&#xff0c;后来仔细发现原来是一个很细微的语法问题&#xff1a;}] 中间不能有逗号&#xff01;&#xff01; ---恢复内容结束---转载于:https://www.cnblog…

图灵奖得主Judea Pearl谈机器学习:不能只靠数据

来源&#xff1a;选自Journal of Causal Inference作者&#xff1a;Judea Pearl编译&#xff1a;机器之心编辑&#xff1a;Panda在当前的人工智能研究社区&#xff0c;以数据为中心的方法占据了绝对的主导地位&#xff0c;并且这类方法也确实成就非凡&#xff0c;为语音识别、计…

计算机网络(二)-性能指标

一、计算机网络性能指标 1.时延 1.1 指数据(报文/分组/比特流)从网络(或链路)的一端传送到另一端所需的时间。也叫延迟或迟 延。单位是s。 数据到达路由器是&#xff0c;需要等待&#xff0c;产生排队时延&#xff0c;在路由器里面需要处理数据&#xff0c;包括检错和查找输…

axios请求本地的json文件在打包部署到子目录域名下,路径找不到

前言&#xff1a; 因为要同时部署两个项目&#xff0c;有一个是部署到域名下面的子目录下&#xff0c;如&#xff1a;https://xxx.com/siot-admin vue 项目中使用axios请求了本地项目的static文件夹下的json文件&#xff0c;使用npm run build 打包后&#xff0c;json文件请求不…

中国集成电路设计产业创新发展的认识和思考

来源&#xff1a;半导体行业观察 7月15日—16日&#xff0c;2021中国集成电路设计创新大会暨IC应用博览会在苏州召开。在本次大会高峰论坛上&#xff0c;中国集成电路设计创新联盟专家组组长、东南大学首席教授、南京集成电路产业服务中心&#xff08;ICisC&#xff09;主任、…

计算机网络(三)-体系结构

一.分层结构 1.分层的基本原则 各层之间相互独立&#xff0c;每层只实现一种相对独立的功能。每层之间界面自然清晰&#xff0c;易于理解&#xff0c;相互交流尽可能少。结构上可分割开&#xff0c;每层都采用最适合的技术来实现。保持下层对上层的独立性&#xff0c;上层单向…