- 浏览: 500951 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
原文地址: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的基础知识点了:
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 WsHttBinding supports WS-*, it has WS-Security enabled by default. So the data is not sent in plain text. |
Security options |
|
|
两者之间最大的不同你一定已经注意到了,那就是安全。默认情况下,BasicHttpBinding发送的是明文数据,而WsHttpBinding发送的是加密和更加安全的数据。为了证明这一点,我们新建两个服务,一个使用BasicHttpBinding,一个使用WsHttpBinding,然后详细查看一下他们的安全方面。
我们创建一个小例子,看看basicHttpBinding是如何明文发送数据的,wsHttpBinding是如何加密数据的。
说明:默认情况下,使用basicHttpBinding的时候,安全是没有启用的。换句话说,它很像以前的webservice,也就是.asmx。但是不意味着我们不能启用安全。稍后,我会写一篇关于basicHttpBinding启用安全的文章。
4、通过5步比较他们的不同点
为了它们之间实际的不同点,我们创建一个小工程。在工程中,创建两个服务,一个使用basicHttpBinding,一个使用wsHttpBinding。
第一步:使用basicHttpBinding创建一个服务,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的服务,配置如下


<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 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。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 552如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 680组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 535本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 6055 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 621前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 846企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 630首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 610概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 1009概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 813我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8561 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9821、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 788引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 667oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 612经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 646今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 689我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 817题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 712今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 678题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
4. **绑定选择**:Silverlight与WCF通信时,可以选择不同的绑定类型,如BasicHttpBinding、WsHttpBinding等。考虑到Silverlight的限制,通常会选择BasicHttpBinding,因为它不支持WS-Security等高级特性,但能满足...
WCF是一种全面的服务导向架构,它允许开发者创建强类型、面向服务的应用程序,这些应用程序能够跨不同的平台和网络进行通信。WCF支持多种传输协议,如HTTP、TCP、命名管道等,同时提供了丰富的安全性和事务处理机制...
WCF的一个显著特性是它同时支持AJAX(Asynchronous JavaScript and XML)和SOAP(Simple Object Access Protocol)这两种不同的调用方式,为开发人员提供了更多的灵活性。 **AJAX调用**: AJAX是一种在不重新加载...
WCF提供了多种内置绑定,如BasicHttpBinding、WSHttpBinding和NetTcpBinding,每种都有其特定的应用场景和性能特征。 3. **终结点**:服务通过终结点与外界交互,每个终结点由地址、绑定和契约组成。地址指定服务的...
WCF融合了多种不同的分布式应用编程模型,如ASMX Web Services、WSE Web Services、MSMQ、DCOM等,使得开发者能够更容易地开发跨平台和跨语言的服务。 #### 二、WCF的核心概念 为了更好地理解和使用WCF,首先需要...
常见的绑定有BasicHttpBinding、WSHttpBinding、NetTcpBinding等,每种绑定支持不同的安全、可靠性及性能特性。 4. **合同**:合同定义了服务提供的操作、消息结构以及服务接口。服务合同可以是数据合同、操作合同...
在IT行业中,Windows Communication Foundation(WCF)是微软推出的一种用于构建分布式应用程序的服务框架,它集成了多种通信协议,如SOAP(简单对象访问协议)和REST(Representational State Transfer)。...
在WCF中,可以设置绑定元素(如BasicHttpBinding、WsHttpBinding等)的UseDefaultWebProxy属性为true,并使用Transport或TransportWithMessageCredential安全模式,结合HTTPS协议来启用SSL/TLS。 在提供的压缩文件...
在WCF中,有多种预定义的Binding可供选择,如NetTcpBinding(高效,适用于内部网络)、WsHttpBinding(支持互操作性,安全性较强)和BasicHttpBinding(简单,用于兼容旧版Web服务)等。每种绑定都对应特定的传输...
Windows Communication Foundation(WCF)是微软.NET框架中用于构建服务的一种技术,它允许开发者创建分布式应用程序,实现不同系统之间的通信。本入门实例旨在让你在短时间内理解并掌握WCF的基础概念和操作。 首先...
1. **服务**: WCF服务是对外提供功能的实体,可以通过不同的绑定和地址被访问。服务由接口定义,实现该接口的类是服务的实现。 2. **终结点**: 服务通过终结点与外部世界交互,每个终结点包含地址、绑定和合同。...
标题中的“Silverlight和WCF不在同一个域中”是指在开发Web应用程序时,Silverlight客户端与Windows Communication Foundation (WCF)服务之间的通信可能涉及到跨域问题。这是因为Silverlight应用通常运行在用户...
**WCF(Windows Communication Foundation)**是微软.NET框架下的一种面向服务的通信框架,它提供了一种统一的方式来创建和部署可互操作的、安全的、可靠的服务。在本例中,我们将探讨WCF如何实现HTTP和SOAP两种通信...
根据提供的文件信息,我们可以归纳出一系列与WCF 4.0相关的专业知识点。这份教材主要围绕Windows Communication Foundation (WCF) 4.0展开,详细介绍了如何利用.NET 4进行服务开发、部署和服务交互等内容。下面我们...
WCF服务可以通过配置文件定义服务接口、行为、绑定和终结点,为开发者提供了高度的灵活性。 RESTful服务基于HTTP协议,强调资源的表示和状态转移。它通过HTTP方法(GET、POST、PUT、DELETE)来操作资源,使得客户端...
**WCF(Windows Communication Foundation)**是微软.NET框架下的一种面向服务的通信技术,它提供了一种统一的方式来构建分布式应用程序,允许不同的系统和服务之间进行安全、可靠、可管理的通信。在本文中,我们将...
总结来说,动态WCF是.NET开发中的一个高级特性,它允许开发者在运行时创建和管理WCF服务,极大地增强了服务的灵活性和适应性。在Silverlight应用中,动态WCF能够实现跨域数据通信,通过异步调用和合适的绑定方式优化...
本项目提供了一个使用C#编写的WCF服务示例,适用于Visual Studio 2008及更高版本,便于理解和学习。 1. **WCF服务基础** - WCF是微软提出的一种统一的编程模型,它集成了.NET Framework中的Web服务(ASMX)、...
WCF提供了多种预定义的绑定,如BasicHttpBinding、WSHttpBinding、NetTcpBinding等。每种绑定都支持不同的传输协议、身份验证机制和消息编码。开发者也可以自定义绑定以满足特定需求。 ### 4. 端点 服务端点是服务...
WCF 作为一种强大的服务通信框架,不仅支持多种消息格式和通信协议,还内置了对事务处理、安全性和可靠性等功能的支持,非常适合构建复杂的分布式应用程序。通过对 WCF 的深入学习和掌握,开发人员可以更有效地构建...