Fiddler没有捕获从Web服务器到应用程序服务器的WCF流量

时间:2011-09-17 21:14:04

标签: fiddler

我有两种可能的流程:

ConsoleClient -(1)-> ApplicationServer

SilverlightClient -(2)-> WebServer -(3)-> ApplicationServer

Fiddler成功捕获(1)和(2)上的HTTP流量,但不捕获(3)上的HTTP流量。以下是(1)上的示例捕获:

POST /WcfDemo/ws HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Host: il-mark-lt
Content-Length: 521
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IWcfDemoService/Add</a:Action><a:MessageID>urn:uuid:d7fde351-12fd-4872-bc26-52ff97f126e9</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://il-mark-lt/WcfDemo/ws</a:To></s:Header><s:Body><Add xmlns="http://tempuri.org/"><x>4</x><y>5</y></Add></s:Body></s:Envelope>

HTTP/1.1 200 OK
Content-Length: 399
Content-Type: application/soap+xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Sat, 17 Sep 2011 20:57:16 GMT

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IWcfDemoService/AddResponse</a:Action><a:RelatesTo>urn:uuid:d7fde351-12fd-4872-bc26-52ff97f126e9</a:RelatesTo></s:Header><s:Body><AddResponse xmlns="http://tempuri.org/"><AddResult>9</AddResult></AddResponse></s:Body></s:Envelope>

以下是(2)的例子:

POST /WcfDemoService.svc/ws HTTP/1.1
Host: localhost:56970
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.6,he-IL;q=0.5,he;q=0.4,ru-RU;q=0.3,ru;q=0.1
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost:56970/ClientBin/SilverlightClient.xap
Content-Length: 581
Content-Type: application/soap+xml; charset=utf-8

<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IWcfDemoService2/Add</a:Action><a:MessageID>urn:uuid:e8420d3e-f568-49ce-bfc7-5631d5bf3fd0</a:MessageID><a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">http://localhost:56970/WcfDemoService.svc/ws</a:To></s:Header><s:Body><Add xmlns="http://tempuri.org/"><x>11</x><y>22</y><serverChannelKind>ws</serverChannelKind></Add></s:Body></s:Envelope>

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Sat, 17 Sep 2011 20:59:23 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 401
Cache-Control: private
Content-Type: application/soap+xml; charset=utf-8
Connection: Close

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IWcfDemoService2/AddResponse</a:Action><a:RelatesTo>urn:uuid:e8420d3e-f568-49ce-bfc7-5631d5bf3fd0</a:RelatesTo></s:Header><s:Body><AddResponse xmlns="http://tempuri.org/"><AddResult>33</AddResult></AddResponse></s:Body></s:Envelope>

现在,我绝对相信(3)确实可以通过。所以,这一切都归结为WebServer上的一些配置错误,但我无法确定它。 Web服务器只是IIS中托管的一个简单的ASP.NET应用程序。它甚至在web.config中有以下几行:

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="false" usesystemdefault="true" />
  </defaultProxy>
</system.net>

但是,这不起作用。

为了进一步加强我对网络服务器配置的怀疑,我检查了SilverlightClient --> ApplicationServer流程并且捕获得很好。

我使用的是Asp.Net开发服务器。

修改

运行procmon会显示以下可疑的注册表项(以及其他):

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\ProxyBypass

在我的机器上它设置为1.我已将其更改为0并且好像它解决了我的问题。唯一的问题是,当我把它改回1时,提琴手继续抓住有问题的腿!非常有趣。

无论如何,我现在感到满意。

2 个答案:

答案 0 :(得分:5)

您正在呼叫“localhost”吗? 如果您使用“localhost”作为主机名,Fiddler将无法捕获本地流量。

解决方案:

答案 1 :(得分:2)

不确定这些是否会导致它......但是,

要检查的一些事项:

  1. 在IIS7中,appPool具有loadUserProfile设置。它会导致会话加载用户配置文件,这意味着它可以获得系统代理设置。

  2. 检查从webServer发出请求的代码 - 即使您配置使用系统代理并绕过onLocal(仅适用于没有点的名称),代码发出请求仍然可以明确设置为使用或不使用代理。

  3. 远程提取,但您可能想要使用appPool运行的帐户 - 配置文件与网络服务的本地帐户。

  4. 希望有所帮助 - 这些网络事物在两点之间有很多变量:)