如何在WCF中用TcpTrace工具查看发送和接收的SOAP消息

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

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

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




  本文转自loose_went博客园博客,原文链接:http://www.cnblogs.com/michaelxu/archive/2010/09/15/1826550.html,如需转载请自行联系原作者

相关文章
|
网络架构 程序员
wcf基础知识之 查看soap消息 TcpTrace
今天本来准备了wcf的三种消息模式 wcf 基础知识 之 消息交换模式 response/reply oneway deplex  的介绍,但是考虑到里面有说到soap消息,但是可能还有一些朋友对如何查看soap消息还不是很清楚,所以这次先来把如何查看wcf通信的介质--soap消息介绍一下。
1060 0
|
XML 网络架构 数据格式
跟着Artech学习WCF(5) Responsive Service 与自定义Soap Message Header
记得以前看.NET各类框架教程在介绍SOAP时经常提到Soap Header 以前一直认为这个玩意就是个理论 应该和具体的编码和应用无关 后来在看到一些关于SOAP安全的书可以在header里 进行加密解密信息的存储 用于安全方面的验证 但一直苦于这个玩意到底是神马东西,一直没见过代码,今天A...
699 0
|
网络架构 负载均衡
如何在WCF中使用tcpTrace来进行Soap Trace(转)
转自:http://www.cnblogs.com/artech/archive/2007/06/14/782845.html 文章很好,直接转载过来了。多谢作者。 无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。
833 0
|
网络架构 负载均衡
如何在WCF中使用tcpTrace来进行Soap Trace(转)
转自:http://www.cnblogs.com/artech/archive/2007/06/14/782845.html 文章很好,直接转载过来了。多谢作者。 无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。
689 0
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
73 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
107 0