我有一个接受复杂类型并返回一些数据的WCF服务。我想使用Fiddler来查看对服务的传入请求是什么样的。客户端是.net控制台应用程序,它使用服务引用代理。这与Fiddler有关吗?我是这个工具的新手,并且过去只使用它来使用请求构建器发布数据。
答案 0 :(得分:140)
您需要在web.config
中添加此内容<system.net>
<defaultProxy>
<proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
这就是全部,但不要忘记在关闭fiddler之后删除web.config行,因为如果你不这样做就会出错。
参考:http://fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy
答案 1 :(得分:8)
Fiddler会侦听出站请求而不是入站请求,因此您无法使用Fiddler监控所有进入您服务的请求。
Fiddler最好的办法是能够查看由控制台应用程序生成的所有请求(假设应用程序生成Web请求而不是使用其他管道)。
如果你想要一个功能更强大(但更难以使用)的工具,你可以监控所有传入的请求,你应该查看WireShark。
修改强>
我的立场得到了纠正。感谢Eric Law将指示发布到configuring Fiddler to be a reverse proxy!
答案 2 :(得分:8)
刚出现这个问题,对我有用的是使用localhost.fiddler:
<endpoint address="http://localhost.fiddler/test/test.svc"
binding="basicHttpBinding"
bindingConfiguration="customBinding"
contract="test"
name="customBinding"/>
答案 3 :(得分:6)
整合几个用例的评论/答案中提到的警告。
大多数情况下,请参阅http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp
在控制台应用中,您可能不需要指定proxyaddress
:
<proxy bypassonlocal="False" usesystemdefault="True" />
在IIS中托管的Web应用程序中,您需要添加proxyaddress
:
<proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
HttpWebRequest
等),它将始终绕过包含localhost
的URL的Fiddler代理,因此您必须使用别名,如机器名称或在“主机”文件中制作一些内容(这就是localhost.fiddler
或http://HOSTNAME
之类的原因)如果您指定proxyaddress
,则必须在未启用Fiddler的情况下将其从配置中删除,或者您的应用发出的任何请求都会引发异常,例如:
无法建立连接,因为目标计算机主动拒绝了它127.0.0.1:8888
答案 4 :(得分:4)
如此简单,您只需更改配置客户端中的地址:而不是“localhost”更改为计算机名称或IP
答案 5 :(得分:1)
如果您可以控制发送通信的客户端,则这很简单。您需要做的就是在客户端服务类上设置HttpProxy。
例如,我这样做是为了跟踪在智能手机上运行的Web服务客户端。我将客户端连接上的代理设置为Fiddler的IP /端口,该端口在网络上的PC上运行。智能手机应用程序然后通过Fiddler将其所有传出通信发送到Web服务。
这完美无缺。
如果您的客户是WCF客户端,请参阅this Q&A了解如何设置代理。
即使您无法修改客户端应用程序的代码,也可以根据客户端使用的Web服务堆栈以管理方式设置代理。
答案 6 :(得分:0)
我使用wire shark工具监控从浏览器中的银灯应用到服务的服务呼叫。尝试link给出明确的信息
它使您能够监控整个请求和响应内容。
答案 7 :(得分:0)
标准WCF追踪/诊断
如果由于某种原因您无法让Fiddler工作,或者宁愿以其他方式记录请求,则另一种选择是使用标准WCF跟踪功能。这将生成一个具有良好查看器的文件。
<强>文档强>
请参阅https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/tracing-and-message-logging
<强>配置强>
将以下内容添加到您的配置中,确保c:\logs
存在,重建并发出请求:
<system.serviceModel>
<diagnostics>
<!-- Enable Message Logging here. -->
<!-- log all messages received or sent at the transport or service model levels -->
<messageLogging logEntireMessage="true"
maxMessagesToLog="300"
logMessagesAtServiceLevel="true"
logMalformedMessages="true"
logMessagesAtTransportLevel="true" />
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Information,ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\logs\TracingAndLogging-client.svclog" type="System.Diagnostics.XmlWriterTraceListener"
name="xml" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
答案 8 :(得分:0)
我刚刚尝试了Brad Rem的第一个答案,并在web.config中的BasicHttpBinding下达到了此设置:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding bypassProxyOnLocal="False" useDefaultWebProxy="false" proxyAddress="http://127.0.0.1:8888" ...
...
</basicHttpBinding>
</bindings>
...
<system.serviceModel>
希望这对某人有帮助。
答案 9 :(得分:0)
答案 10 :(得分:0)
使用 fiddler 反向代理是我的最终解决方案。
首先,使用 REGDIT 将 fiddler 配置为反向代理,如文档所述:https://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy#configure-fiddler-as-reverse-proxy
1) 单击工具> Fiddler 选项。确保选中允许远程客户端连接
2) 在 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2
内新建一个名为 ReverseProxyForPort 的 DWORD。
3) 将 DWORD 设置为 Fiddler 将重新路由入站流量的本地端口。
4) 重启 Fiddler。
二、改客户端通过代理调用服务
例如,这是我的客户端 app.config:
<client>
<endpoint address="http://localhost:61236/WeatherForecastService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWeatherForecastService"
contract="ServiceReference1.IWeatherForecastService" name="BasicHttpBinding_IWeatherForecastService" />
</client>
更改客户端以使用代理端点地址。
WeatherForecastServiceClient client = new WeatherForecastServiceClient("BasicHttpBinding_IWeatherForecastService", "http://localhost:8888/WeatherForecastService.svc");
var data = client.GetData(1000);
client.Close();