我们正在使用OData Web API CRM 2016 endpoint。
我正在创建一个请求,从邮递员流向localhost微服务,然后流向CRM:
邮递员---> localhost微服务---> CRM
我可以查看第一段的流量(Postman - > LocalHost);然而,小提琴曲线显示没有任何东西来自LocalHost - > CRM。
Fiddler显示来自 Postman - > LocalHost 的请求的以下数据:
POST https://localhost:19081/..../API/leads HTTP/1.1
Host: localhost:19081
Connection: keep-alive
Content-Length: 84
Cache-Control: no-cache
Origin: chrome-extension://aicmkgpgakddgnaphhhpliifpcfhicfo
MSCRMCallerID: D994D6FF-5531-E711-9422-00155DC0D345
X-Postman-Interceptor-Id: 84840bba-bc4b-9b06-d3ab-e264045e8918
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Cookie: ai_user=Ka2Xn|2017-05-25T17:30:57.941Z
{
"subject": "created by mscrmcaller user2: d994d6ff-5531-e711-9422-00155dc0d345"
}
但是, LocalHost - > CRM 没有拦截任何内容!
请注意,这两条路线都是HTTPS。
当绕过localhost 时,流量可见!
请求的创建方式如下:
//Create payload for request
var content = new StringContent(lead.ToString(), Encoding.UTF8, "application/json");
//Create POST request with data from above
var request = RequestCreator.Create(uri, validHeaders, HttpMethod.Post, content);
//Issue request
var postResponse = Client.Instance.SendAsync(request).Result;
我们做错了什么?
答案 0 :(得分:7)
Fiddler不会跟踪服务器到服务器的流量。您需要将“localhost microservice”配置为通过fiddler代理(默认为127.0.0.1:8888)。如果您的“localhost微服务”是.NET(看起来像这样),您可以添加
<system.net>
<defaultProxy>
<proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
</defaultProxy>
</system.net>
要么你的web.config(将fiddler用作服务的代理)或machine.config(将使用fiddler代理用于任何.NET应用程序)。
机器配置在这里:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
参考:http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp
由于您的连接是通过HTTPS进行的,因此您还需要配置fiddler来解密HTTPS流量(工具 - &gt;选项 - &gt; HTTPS-&gt;解密HTTPS流量)。
修改的
这个建议假设你将在与你的“localhost微服务”机器相同的机器上运行fiddler,但只要端口8888可以从你的“localhost microservice”机器和fiddler机器上运行,你就可以在任何地方运行fiddler。将http请求发送到最终目的地(在您的情况下为CRM机器)。如果您想在其他地方运行fiddler,只需将proxyaddress
配置为不同的IP,例如http://10.0.0.1:8888。在这种情况下,您还需要配置fiddler以允许远程传入流量(工具 - &gt;选项 - &gt;连接 - >允许远程计算机连接)
答案 1 :(得分:2)
我使用WireShark(https://www.wireshark.org/)来检查此类流量
Fiddler的工作方式与本地代理服务器类似,因此您无法找到计算机发送或接收的所有数据包
Windows中的WireShark就像流量过滤器一样工作。您可以监听环回流量,流量到您需要的任何服务器,流量用于确切的界面,您可以使用过滤器查找所需的数据包。
如果您需要监听SSL流量,也可以使用WireShark(如果您有两个密钥,服务器和客户端),但在Fiddler中则更难。因为Fiddler就像中间的人,而WireShark需要解密SSL数据包(https://wiki.wireshark.org/SSL)。
要监听环回流量,您需要安装npcap驱动程序而不是WinPcap(https://nmap.org/npcap/)。
答案 2 :(得分:2)
如果可能,请使用localhost
而不是Machine Name
使用module
,并在IIS Express下运行微服务。这两个操作都会导致通过Fiddler代理发送包。
答案 3 :(得分:2)
虽然你可以按照Ondrej的建议使用代理,但是说Fiddler无法捕获locahost服务器 - 服务器流量是不准确的。
更准确地说,如果没有该代理,Fiddler将仅捕获用户身份的流量。
因此,更简单的解决方案是将应用程序池更改为以用户身份(而非服务帐户)运行。
答案 4 :(得分:2)
只需更改localhost
- 到 - &gt;您的端点配置中为localhost.fiddler
。如果你想坚持使用Fiddler,这就可以了。