2

这是我目前拥有的设置:

客户端应用程序 -----> 中间 Web API 服务(接收来自客户端的调用) ------> 3rd 方 RESTful 服务(接收来自中间服务的调用)

因此,如果我从客户端向中间服务发起调用,或者从中间服务向第 3 方服务发起调用,我可以使用 Fiddler 或 Wireshark 来检查 POSTed XML/JSON。

问题是当我一直从客户端拨打电话时,我想检查从中间服务发送到第 3 方服务的实际原始 HTTP 传出消息。如果我在包含中间服务的服务器上运行 Fiddler,我看不到 HTTP 流量从它出站。我也尝试过 Wireshark,但它也不会占用流量。但是我知道它正在发生,因为第 3 方服务正在向我发送错误。

中介服务充当客户端应用程序对第​​ 3 方服务的门面,并在使另一个 HTTP 客户端出站到第 3 方服务之前处理来自客户端的数据。我在第 3 方服务接受传出消息时遇到问题,并且确实需要看到中间服务省略了原始 HTTP 消息(我正在使用 aHttpClient.PostAsync将数据发布到第 3 方服务)。在发送之前我已经将它保存到数据库中,但我提取的内容似乎还可以。

所以主要问题是,我如何获得我的中介服务正在发布到第 3 方服务的消息?是否有 Fiddler、Wireshark 或其他程序可用于检查从该中介服务出站的 HTTP 消息?

4

2 回答 2

2

配置您的“中间 Web API 服务”以通过在同一(或不同)计算机上运行的 Fiddler 实例代理其流量,这将正常工作。

如果您的服务是用 .NET 编写的,您可以手动配置其代理: http ://www.fiddler2.com/fiddler/help/hookup.asp#Q-DOTNET或者您可以更新 machine.config 或 web.config :http ://www.telerik.com/automated-testing-tools/blog/eric-lawrence/13-01-08/capturing-traffic-from-net-services-with-fiddler.aspx使其流量通过Fiddler 实例。

于 2013-04-02T17:40:18.410 回答
0

我认为 Fiddler 不会起作用,因为它只会拦截在浏览器中进行的调用。你可以对你的中间代码进行修改吗?您可以注入一个处理程序来记录用于调用第三方服务的 HttpClient 中的消息。处理程序看起来像这样,

public class LogginHandler : DelegatingHandler
{
    public LogginHandler(HttpMessageHandler inner)
        : base(inner)
    {
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
            using (var fs = new FileStream("c:\\temp\\log.txt", FileMode.Create, FileAccess.Write))
            {
                await request.Content.CopyToAsync(fs);
            }

            return await base.SendAsync(request, cancellationToken);

    }
}

以及在这样的 HttpClient 实例中注入此处理程序的代码,

HttpClient client = new HttpClient(new LogginHandler(new HttpClientHandler()));
于 2013-04-02T15:17:21.447 回答