热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1、简介WCF引入了很多的绑定和协议。本文重点讨论两个协议,BasicHttpBinding和WsHttpBinding,他们看起来很相似,

1、简介

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

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

2、预备知识

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

3、BasicHttpBinding和WsHttpBinding的不同点

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

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

Criteria

BasicHttpBinding

WsHttpBinding

Security support

This supports the old ASMX style, i.e. WS-BasicProfile 1.1.

This exposes web services using WS-* specifications.

Compatibility

This 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 version

SOAP 1.1

SOAP 1.2 and WS-Addressing specification.

Reliable messaging

Not 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 options

By default, there is no security provided for messages when the client calls happen. In other words, data is sent as plain text.

As WsHttBindingsupports 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。

d75cb3816e5a09de8ff5dcdecbfa8b37.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png代码

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png代码

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png代码

publicclassService1 : IService1

{publicstringGetData(intvalue)

{returnstring.Format("You entered: {0}", value);

}publicCompositeType GetDataUsingDataContract(CompositeType composite)

{if(composite.BoolValue)

{

composite.StringValue+="Suffix";

}returncomposite;

}

}

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

d88c45a2de50216f294459a6167bacc9.png

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

945327de50562546eba87922fc4961d4.png

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

669e7ac3df0f42d8bf12b4c4189aaebe.png

总之,尽量避免使用BasicHttpBinding。

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

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



推荐阅读
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • jmeter_正则提取器_JDBC_Connection_Configuration
    ______27__________正则提取器https:www.cnblogs.compoloyyp13179150.html _____28__SOAP协议 https:www ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
黄欣豪972
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有