如何在WCF中用TcpTrace工具查看发送和接收的SOAP消息
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消息的更多相关文章
- 如何在wcf中用net tcp协议进行通讯
快速阅读 如何在wcf中用net tcp协议进行通讯,一个打开Wcf的公共类.比较好好,可以记下来. 配置文件中注意配置 Service,binding,behaviors. Service中配置en ...
- 如何在Ubuntu中用firefox浏览器查看chm文档?
首先下载这插 件:在firefox中点击“工具”->“附加软件”->“扩展”,在firefix扩展网页下搜索“"chmfox" 然后安装,重启后就可以了.
- 传说中的WCF(4):发送和接收SOAP头
如果你实在不明白Header是个啥玩意儿,你就想一想你发送电子邮件时,是不是有个叫“附件”的东东?对啊,那么SOAP头是不是可以理解为一种附加信息?就是附加到消息正文的内容. 消息正文又是啥?WCF除 ...
- WCF学习之旅—TcpTrace工具(二十五)
前面的几篇文章,我们学习了怎么开发WCF应用程序与服务,也学习了如何进行WCF的配置.对于Web Service与WCF服务应用,服务端与客户端的通信是通过收发SOAP Message进行,我们如何有 ...
- 如何使用C#和VB发送和接收MSMQ消息
在这篇博客中,我们将就如何实现System.Messaging类发送和接收的XML消息发送从MSMQ队列,你可能会遇到接收的XML消息的一些问题. 我们将首先加入参考System.Messaging ...
- WCF学习之旅—TcpTrace工具(二十六)
止文(WCF学习之旅—TcpTrace工具(二十五))介绍了关于TcpTrance的一种使用方式,接下来介绍第二种使用方式. 三.通过ListenUri实现基于tcpTracer的消息路由 对于路由的 ...
- 如何在vscode中用standard style 风格去验证 vue文件
1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...
- 如何在Drupal7中用代码批量创建节点、评论和分类
最近,我忙于一个网站迁移工作.网站是使用某个老式CMS建立的,有一定数量的文章.不同的分类数据和用户评论.我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupa ...
- 如何在Mac上显示和查看隐藏的文件/文件夹
今天的文章推出的是如何在Mac上显示和查看隐藏的文件/文件夹.出于隐私或安全性考虑,出于多种原因,我们需要在Mac计算机上隐藏某些文件.这些文件或文件夹在默认情况下是为Mac的平稳运行而隐藏的,但是如 ...
随机推荐
- poj 1789 每个字符串不同的字母数代表两个结点间的权值 (MST)
题目大意是就是给出n个长度为7的字符串,每个字符串代表一个车,定义车的距离是两个字符串间不同字母的个数,题目要求的数不同的车的距离的最小值,即所求的就是最小生成树 Sample Input 4aaaa ...
- PC_android通信之传输图片并显示在手机端【转】
从服务器 (PC 端 ) 发送图片到客户端 (android 手机端 ) ,并在手机页面上显示该图片.(注:本文旨在实现功能,并未考虑效率,有待后续跟进.) 1.服务器端 int port=9090; ...
- Flink(二)CentOS7.5搭建Flink1.6.1分布式集群
一. Flink的下载 安装包下载地址:http://flink.apache.org/downloads.html ,选择对应Hadoop的Flink版本下载 [admin@node21 soft ...
- java:利用java的输入/输出流将一个文件的每一行+行号复制到一个新文件中去
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- jenkins X实践系列(1) —— 背景知识
本文介绍jenkins X(以下简称jx)相关的背景技术. jenkins X 简介 Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务 ...
- BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1787 题意概括 有一棵节点为n个(n≤500000)的树.接下来m次询问(m≤500000),每次 ...
- 042 将数据导入hive,将数据从hive导出
一:将数据导入hive(六种方式) 1.从本地导入 load data local inpath 'file_path' into table tbname; 用于一般的场景. 2.从hdfs上导入数 ...
- JVM GC-----3、垃圾标记算法(二)
在上一篇文章中,介绍了在GC机制中,GC是以什么标准判定对象可以被标记的,以及最有效最常用的可达性分析法.今天介绍另外一种非常常用的标记算法,它的应用面也相当广泛.这就是:引用计数法 Referenc ...
- (转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
request中发送json数据用post方式发送Content-type用application/json;charset=utf-8方式发送的话,直接用springMVC的@RequestBody ...
- Luogu
dalao们的博客a http://hzwer.com //Orz %%% https://oi-wiki.org //Orz https://www.cnblogs.com/-guz/p/9 ...