WCF对消息加密(只对消息加密,不考虑Authorize)其实很简单,只要在server和client端的binding加入security mode为Message(还有Transport, TransportWithMessageCredential,关于他们的不同之处,请参考MSDN)即可。

以一个简单的例子说明,这个例子只有一个Greeting方法,回显客户端的输入,如客户端输入"WCF",调用service的Greeting方法后回显"Hello,WCF!"。我这里server端的配置文件如下:

Client端没有使用配置文件,直接在代码中编写,但要与server端一致:

var binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Message;

当我们对消息加密后,如果想查看一下是否真的加密,就要用到一个工具TcpTrace,这是一个可以跟踪SOAP消息的很好用的工具。也可以应用于web service的消息查看,因为都是SOAP消息格式。这个工具的官方网站下载地址:http://www.tcptrace.org/download.html。不需要安装,下载后直接运行。

这个工具的原理就是开一个侦听端口,用于侦听Client端发送的数据,当Client发出一个Soap消息后,先把Soap拦截下来,进行Soap跟踪处理(如显示Soap消息,或记入log等)之后再把Soap消息传到真正的Service。所以我们需要配置两个port,一个是侦听端口,一个是目标端口,也就是service端口。如下图:

点击OK就进入工作状态了。

但是为了能让TcpTrace侦听到Client端发出的消息,我们要在Client端做些工作,需要一个特殊的Client端的Endpoint Behavior:ClientViaBehavior。假设tcpTrace进行监听的Port为8081, 那么Client实现了ClientViaBehavior的代码如下,当然也可以在配置文件中直接添加。


var binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Message; //Encrypt, can check with Tcp Trace
binding.Security.Mode = SecurityMode.Message;
//Not encrypt
//binding.Security.Mode = SecurityMode.None; var factory = new ChannelFactory<IHelloService>(
binding, new EndpointAddress("http://localhost:8080/HelloService")); //Add listening port only at client.
Uri tcpTraceUri = new Uri("http://localhost:8081/HelloService");
factory.Endpoint.Behaviors.Add(new ClientViaBehavior(tcpTraceUri)); var proxy = factory.CreateChannel();
var result = proxy.Greeting("WCF Message");

注意代码中的8081端口,作为behavior加入到endpoint中。这个behavior只在Client端的endpoint中加,server端不需要。

然后就可以启动TcpTrace了,界面如下:

我们先来看一下TcpTrace跟踪的不加密的Soap消息,即Client端的binding SecurityMode为None的情况:

可见消息是明码的。我们再来看一下加密后的情况,即Client端的binding SecurityMode为Message的情况:

可见消息都是加密过的,从而保证了消息的安全性。当然还可以加入用户认证,交换证书等安全性机制,这个例子只是说明如何使用TcpTrace来跟踪Soap消息,所以只做了加密部分。

例子代码请到我的个人网站下载:http://www.vczx.com/article/show.php?id=1011812

欢迎大家提出任何意见或建议!

如何在WCF中用TcpTrace工具查看发送和接收的SOAP消息的更多相关文章

  1. 如何在wcf中用net tcp协议进行通讯

    快速阅读 如何在wcf中用net tcp协议进行通讯,一个打开Wcf的公共类.比较好好,可以记下来. 配置文件中注意配置 Service,binding,behaviors. Service中配置en ...

  2. 如何在Ubuntu中用firefox浏览器查看chm文档?

    首先下载这插 件:在firefox中点击“工具”->“附加软件”->“扩展”,在firefix扩展网页下搜索“"chmfox" 然后安装,重启后就可以了.

  3. 传说中的WCF(4):发送和接收SOAP头

    如果你实在不明白Header是个啥玩意儿,你就想一想你发送电子邮件时,是不是有个叫“附件”的东东?对啊,那么SOAP头是不是可以理解为一种附加信息?就是附加到消息正文的内容. 消息正文又是啥?WCF除 ...

  4. WCF学习之旅—TcpTrace工具(二十五)

    前面的几篇文章,我们学习了怎么开发WCF应用程序与服务,也学习了如何进行WCF的配置.对于Web Service与WCF服务应用,服务端与客户端的通信是通过收发SOAP Message进行,我们如何有 ...

  5. 如何使用C#和VB发送和接收MSMQ消息

    在这篇博客中,我们将就如何实现System.Messaging类发送和接收的XML消息发送从MSMQ队列,你可能会遇到接收的XML消息的一些问题. 我们将首先加入参考System.Messaging ...

  6. WCF学习之旅—TcpTrace工具(二十六)

    止文(WCF学习之旅—TcpTrace工具(二十五))介绍了关于TcpTrance的一种使用方式,接下来介绍第二种使用方式. 三.通过ListenUri实现基于tcpTracer的消息路由 对于路由的 ...

  7. 如何在vscode中用standard style 风格去验证 vue文件

    1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...

  8. 如何在Drupal7中用代码批量创建节点、评论和分类

    最近,我忙于一个网站迁移工作.网站是使用某个老式CMS建立的,有一定数量的文章.不同的分类数据和用户评论.我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupa ...

  9. 如何在Mac上显示和查看隐藏的文件/文件夹

    今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...

随机推荐

  1. C# semphore的使用

    ”信号量非常类似于互斥,信号量可以同时由多个线程使用. 信号量是一种计数的互斥锁定,可以定义允许同时访问受旗语锁定保护的资源的线程个数. 如果需要限制可用资源的线程数,信号量就非常有用.例如,如果系统 ...

  2. 多版本并发控制(MVCC)

    可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低. 虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行. MVCC的实现是通过保存数据在某个时间 ...

  3. CSS3常用功能的写法 转

    CSS3常用功能的写法 作者: 阮一峰   随着浏览器的升级,CSS3已经可以投入实际应用了. 但是,不同的浏览器有不同的CSS3实现,兼容性是一个大问题.上周的YDN介绍了CSS3 Please网站 ...

  4. 【Java】 剑指offer(48) 最长不含重复字符的子字符串

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字 ...

  5. How to uninstall Maya on a Mac

    How to uninstall Maya on a Mac Products and versions covered  By:  Support Jun 15 2018 SHARE ADD TO ...

  6. Android高效内存2:让图片占用尽可能少的内存

    Android高效内存:让图片占用尽可能少的内存 一.让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 168 资源目录:xhdpi 小图的高宽都是 ...

  7. 三篇文章带你极速入门php(一)之语法

    本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本& ...

  8. Linux虚拟机上安装redis

    1.检查安装依赖程序 yum install gcc-c++ yum install -y tcl yum install wget 2.获取安装文件 wget http://download.red ...

  9. NTFS的交换数据流ADS应用

    NTFS的交换数据流ADS应用   NTFS是Windows常用的文件系统格式.该格式支持交换数据流(Alternate Data Streams,缩写ADS)特性.该特性可以让多个文件流使用同一个文 ...

  10. JS-最全的创建对象的方式

    JS最全创建对象方式汇总 1.最简单的方式--创建一个Object实例 var person = new Object(); //创建实例 person.name = "BlueBeginn ...