我使用 WCF 在 Visual Studio 中创建了一个简单的 TCP 客户端和 TCP 服务器。我在服务器上有一个简单的操作,它接收一个整数,递增它并将它发回。它按预期工作。
我想使用 Wireshark 来监控在 localhost 上运行的客户端和服务器之间的流量。显然,这在 Windows 上安装 Wireshark 标准是不可能的,因为它无法监控环回适配器。有一个名为 Npcap 的库旨在解决这个问题,所以我安装了这个:
当我运行 Wireshark 并选择捕获
Npcap 环回适配器
我没有看到任何 TCP 流量(仅某些 UDP 和 DHCP)。我想知道我希望看到什么?
服务器的 C# 代码在这里(我以编程方式创建它,以便您可以查看所有详细信息,App.Config 中没有配置任何内容)
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace TcpServer
{
// Defining the service
[ServiceContract]
public interface ITcpService
{
[OperationContract]
int GetNumber(int num);
}
// Implementing the service
public class TcpService : ITcpService
{
public int GetNumber(int num)
{
return num + 1;
}
}
class TcpServerConsole
{
static void Main(string[] args)
{
ServiceHost host;
// Attempt to open the service
try
{
// Create the service host with a Uri address and service description
host = new ServiceHost(typeof(TcpService), new Uri("net.tcp://127.0.0.1:9000/MyService"));
// Create the metadata that describes our service, add it to the service host
var metadataBehavior = new ServiceMetadataBehavior() { HttpGetEnabled = false };
host.Description.Behaviors.Add(metadataBehavior);
// Add a tcp endpoint for our service, using tcp
host.AddServiceEndpoint(typeof(ITcpService), new NetTcpBinding(), "");
// Add the meta data service endpoint for describing the service
var mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, "net.tcp://127.0.0.1:9000/MyService/mex");
// Open our service
host.Open();
}
catch (Exception e)
{
// Catch any problem with creating the service and report
Console.WriteLine("Failed to open the server: {0}", e.Message);
Console.WriteLine("Press [Return] to close");
Console.ReadKey(true);
return;
}
// Halt the program to keep the service open
Console.WriteLine("Press [Return] to close server");
Console.ReadKey(true);
host.Close();
}
}
}