zoukankan      html  css  js  c++  java
  • 如何在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

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

  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/Alex80/p/9448910.html
Copyright © 2011-2022 走看看