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>
 

原文地址:https://www.cnblogs.com/BinZeng/p/1828226.html