zoukankan      html  css  js  c++  java
  • TcpTrace追踪远程服务器的soap信息

    应用场景:工作需要追踪一个远程的wcf的服务是否正确,所以需要TcpTrace工具追踪远程服务是否抓取的数据是否正确。TcpTrace的原理很简单:

    说的简单点TcpTrace就是一个监听/转发器(Listening/Forwarding)。当我们启动这个工具的时候,通过设置它监听的Port,和它将要转发的Host和Port(Destination Server& Destination Port),随后它就开始在本机的Listening Port开始监听,如果这时候一个针对该Listening Port 的Http Request,它就会把Request的内容取下来展现在我们的面前,随后将该Request转发到我们预先设定的Host和Port。

    网上的例子都是在本地调用,所以先给出远程调用服务的注意事项。

    1:是远程调用有权限的问题。所以需要在服务器的config文件中设置权限为None。

    格式如下

    <bindings>
                <wsHttpBinding>
                    <binding name="NewBinding0">
                        <security mode="None" />
                    </binding>
                </wsHttpBinding>
            </bindings>

    如果自己权限写的wcf的服务建议大家安一下方式写config.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <wsHttpBinding>
                    <binding name="NewBinding0">
                        <security mode="None" />
                    </binding>
                </wsHttpBinding>
            </bindings>
            <services>
                <service behaviorConfiguration="MyServiceTypeBehaviors" name="Services.HelloService">
                    <endpoint binding="wsHttpBinding" bindingConfiguration="NewBinding0"
                        contract="Contracts.IHelloService" />
                    <host>
                        <baseAddresses>
                            <add baseAddress="http://localhost:8080/HelloService" />
                        </baseAddresses>
                    </host>
                </service>
            </services>
          <behaviors>
            <serviceBehaviors>
              <behavior name="MyServiceTypeBehaviors" >
                <!-- 将下列元素添加到服务行为配置中。 -->
                <serviceMetadata httpGetEnabled="true" />
              </behavior>
            </serviceBehaviors>
          </behaviors>

        </system.serviceModel>
    </configuration>

    关键点用红字标出.

    2:在客户端同样要把binding.Security.Mode = SecurityMode.None;

    3:增加一个远端调用ChannelFactory.

       var factory = new ChannelFactory<IHelloService>(
                    binding, new EndpointAddress("http://192.168.1.57:8080/HelloService"));

    4:增加发到TcpTrace的behavior。如下设置

                //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");
                Console.WriteLine(result);

    5:开启TcpTrace。

    在监听端口写入自己定义的端口[8081],也就是在客户端配置的behavior里面uri里面的端口,目标服务器写入远端的ip。目标端口就是远程服务器服务的端口。

    做完以上步骤就可以完成监听了。

    下面的代码示例演示一个示例客户端配置文件。

    <endpoint
      address=http://localhost:8000/MyServer/
      binding="wsHttpBinding"
      bindingConfiguration="WSHttpBinding_IMyContract"
      behaviorConfiguration="MyClient"
      contract="IMyContract"
      name="WSHttpBinding_IMyContract">
    </endpoint>
    <behaviors>
      <endpointBehaviors>
        <behavior name="MyClient">
          <clientVia viaUri="http://localhost:8001/HelloService/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
     

  • 相关阅读:
    用Shell判断字符串包含关系
    shell命令调用http接口(curl方式)
    shell脚本实现发送信息到钉钉
    功能测试特殊字符处理总结
    Java_Swing实现小球沿正弦曲线运动的代码
    Python迁移MySQL数据到MongoDB脚本
    1. WP8.1学习笔记
    0. WP8.1学习笔记
    小练习--低仿系统计算器
    C#字符串题目
  • 原文地址:https://www.cnblogs.com/BinZeng/p/1828226.html
Copyright © 2011-2022 走看看