`
star65225692
  • 浏览: 273869 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

通过绑定元素看各种绑定对消息保护的实现

阅读更多

为了演示方便,我写了如下一个针对Binding类型的扩展方法ListAllBindingElements,该方法会将绑定所有的绑定元素的类型打印出来。接下来,我们就利用这个扩展方法应用了那些常见的绑定,看看最终决定安全传输的是哪些绑定元素。

   1: public static class BindingExtension

   2: {

   3:     public static void ListAllBindingElements(this Binding binding)

   4:     {

   5:         int i = 0;

   6:         foreach (var bindingElement in binding.CreateBindingElements())

   7:         {

   8:             Console.WriteLine("\t{0}.{1}", ++i, bindingElement.GetType().FullName);

   9:         }

  10:     }

  11: }

一、BasicHttpBinding

我们先来看看对于三种典型安全模式(Transport、Message和Mixed)下的BasicHttpBinding具体由哪些绑定元素构成,为了我编写了如下的程序。

   1: BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

   2: Console.WriteLine("Transport:");

   3: binding.ListAllBindingElements();

   4: 

   5: binding = new BasicHttpBinding(BasicHttpSecurityMode.Message);

   6: binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

   7: Console.WriteLine("Message:");

   8: binding.ListAllBindingElements();

   9: 

  10: binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);

  11: Console.WriteLine("Mixed:");

  12: binding.ListAllBindingElements();

输出结果:

   1: Transport:

   2:         1.System.ServiceModel.Channels.TextMessageEncodingBindingElement

   3:         2.System.ServiceModel.Channels.HttpsTransportBindingElement

   4: Message:

   5:         1.System.ServiceModel.Channels.AsymmetricSecurityBindingElement

   6:         2.System.ServiceModel.Channels.TextMessageEncodingBindingElement

   7:         3.System.ServiceModel.Channels.HttpTransportBindingElement

   8: Mixed:

   9:         1.System.ServiceModel.Channels.TransportSecurityBindingElement

  10:         2.System.ServiceModel.Channels.TextMessageEncodingBindingElement

  11:         3.System.ServiceModel.Channels.HttpsTransportBindingElement

我们来具体分析一下最终在不同安全模式下输出的绑定元素列表。对于Mixe安全模式下对服务的验证、消息签名和加密都是基于Transport安全,Message安全仅仅用于对客户端的认证。所以对于Transport和Mixed模式,消息保护都是通过HttpsTransportBindingElement 来实现。从名称就可以看出来,这是一个基于HTTPS的传输绑定元素,这也再次印证了BasicHttpBinding通过HTTPS实现Transport安全模式的说法。asp.net利用.net控件实现下拉导航菜单的制作

对于Message安全模式的三个绑定元素中,很明显和安全传输相关的是AsymmetricSecurityBindingElement 。从名称我们就知道,该绑定元素通过非对称加密 的 方式提供签名和加密的实现。具体来说,对于请求消息来说,发送方使用自己的私钥对消息进行签名,使用接收方的公钥对消息进行加密。接收方采用发送方的公钥 验证签名,用自己的私钥对消息进行解密。这也是为什么在选择了Message安全模式的情况下,基于用户名/密码的客户端凭证不被支持的真正原因。

 


分享到:
评论

相关推荐

    WCF http绑定服务端 客户端调用

    - `Message`安全模式则在消息级别加密数据,提供更强的保护。 **性能优化**: - 使用`MaxReceivedMessageSize`属性限制接收消息的大小,防止DoS攻击。 - 调整缓冲区大小和批处理大小以优化性能。 - 开启会话模式以...

    treeview绑定数据代码

    在.NET开发环境中,TreeView控件是一种常用的用户界面元素,它以树形结构显示数据,常用于网站或桌面应用中展示层级关系的数据。本教程将详细讲解如何使用TreeView控件来绑定SQL数据库中的数据,以“treeview”表为...

    html表单form元素+各种input元素+常用元素综合案例.

    5. `<button>`:自定义按钮,可以绑定JavaScript事件,实现更复杂的功能。 在实际案例中,我们需要考虑表单验证,这通常通过HTML5的内置验证(如`required`属性)或JavaScript实现,以确保用户输入的数据有效且符合...

    WCF实现消息的交互

    服务通过绑定来确定如何与外部世界通信,而绑定由多个元素组成,如传输(例如HTTP、TCP)、编码(例如SOAP、二进制)和消息协议(例如WS-Security)。 创建一个WCF服务通常包括以下步骤: 1. **定义服务合同**:...

    WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为的不同.rar

    双向数据绑定是WPF中一种强大的特性,它允许用户界面(UI)元素与应用程序的后台数据模型之间保持同步。标题提到的问题是当绑定到一个没有公开set方法的属性时,在.NET Framework 4.5和.NET Core这两个不同框架下的...

    myJQuery自己动手实现一个JQuery

    虽然实现完整的动画功能可能较为复杂,但我们可以从简单的淡入淡出效果开始,通过改变元素的透明度来实现。这涉及CSS样式操作和定时器的使用。 最后,了解jQuery如何处理Ajax请求。jQuery的`.ajax()`函数使得异步...

    c语言实现继承与多态

    多态性是通过虚函数(在C++中)或接口(在Java中)实现的,但在C语言中,我们可以使用函数指针和动态绑定来模拟这一概念。每个类可以有一个函数指针数组,其中每个元素对应一个虚函数。在运行时,通过对象的类型信息...

    vb.net屏幕保护程序

    如果使用WPF,开发者可能会创建一个或多个UI元素的动画序列,通过`Storyboard`和`Timeline`类控制动画的播放,以实现更复杂和流畅的视觉体验。 在描述中提到这个屏幕保护程序是“简单但实用”的,可能意味着它没有...

    运用wpf wcf 实现的聊天室的功能

    2. **数据绑定**: WPF的强大之处在于其数据绑定机制,允许UI元素直接绑定到应用程序的数据源,实现视图和模型的自动同步。 3. **控件**: WPF提供了一系列内置控件,如TextBox、Button、ListBox等,可以满足各种UI...

    DICOM医学图像数据接口的Java实现

    总的来说,DICOM医学图像数据接口的Java实现涉及了医学图像数据的解析、处理、存储和传输,需要对DICOM标准、Java编程以及可能的图像处理库有深入的理解。通过合理的编程和库的使用,可以构建功能丰富的医学图像应用...

    自定义列表框,可以屏蔽某些元素

    首先,理解“屏蔽某些元素”意味着在列表框中不显示特定项目,可能是出于隐私保护、数据过滤或其他设计考虑。在编程实现中,这通常涉及到遍历列表并决定哪些项应该被显示,哪些应该被隐藏。例如,在Java中,你可以...

    juery 实现 腾讯微信 广播

    3. **事件处理**:jQuery 的事件处理函数如 `.on()` 可以绑定各种事件,例如点击(click)、焦点获取(focus)等。在腾讯微信广播中,可能需要监听用户的行为以触发广播消息。 4. **Ajax交互**:为了实现广播功能,...

    javascript实现在某个元素上阻挡鼠标右键大事的方法和实例__1.docx

    在这个示例中,`activeArea`元素的`oncontextmenu`事件被绑定到`customContextMenu`函数。这个函数首先检查是否支持`event.preventDefault()`,如果支持则调用它;如果不支持(如在IE中),则将`event.returnValue`...

    《wcf技术内幕》值得一看

    这些可以通过绑定元素来配置,如Transport、Message或TransportWithMessageCredential等安全模式。同时,WCF也支持跨服务的分布式事务,可以与.NET事务协调器(MSDTC)集成,确保数据一致性。 ### 5. 消息队列与...

    vb图书管理系统设计与实现(源代码+论文).rar

    4. 数据绑定:在VB中,可以通过控件的数据绑定功能将数据库字段与界面元素关联,实现数据的实时显示和编辑。例如,可以将书名绑定到一个文本框,当查询结果改变时,文本框内容自动更新。 5. 查询和过滤功能:系统应...

    北大青鸟项目实战JSP论坛短消息

    消息发送与接收功能可能需要一个消息模型,包括消息实体类、发送和接收接口以及实现。开发者可能会使用ArrayList或HashMap等数据结构存储消息,同时利用session或cookie来跟踪用户状态,确保消息的正确投递。此外,...

    于应用系统权限管理系统的设计与实现

    用户是权限的主体,角色是权限分配的载体,目标是受保护的资源,访问模式定义了对资源的访问方式,而操作则实现了资源与访问策略的绑定。 2. **资源控制** - 资源是系统需要保护的对象,具有层次关系和包含关系。...

    python实现类似QQ群聊

    在这个项目中,wxPython被用来创建好友列表、聊天窗口以及消息输入框等元素。 2. **Socket编程**:Socket是网络编程的基本组件,用于在不同计算机之间建立连接并交换数据。在QQ群聊应用中,socket负责处理客户端...

    高仿360安全卫士 9.2 界面 (纯qml实现)

    开发者可以通过阅读这些QML文件来了解如何构建复杂的界面,并学习QML语言的各种特性和技巧,如状态管理、数据绑定、动态加载和组件重用等。 总结来说,这个项目是一个使用Qt和QML技术来模仿360安全卫士9.2界面的...

    js实现的软键盘

    3. CSS样式:为了使软键盘看起来美观且易于使用,需要掌握CSS来控制布局、颜色、字体等样式属性。Flexbox或Grid布局可以用来创建整齐的键盘网格,而CSS动画可以增加交互性。 4. 字符编码与输入处理:当用户点击软...

Global site tag (gtag.js) - Google Analytics