Stává se mi to při nasazování webových aplikací s MSDeploy opakovaně a vždy mi chvíli trvá, než mi dojde, čím to je:
…na vině je jinak bezvadný Fiddler. Pokud ho vypnu, vše začne fungovat.
Stává se mi to při nasazování webových aplikací s MSDeploy opakovaně a vždy mi chvíli trvá, než mi dojde, čím to je:
…na vině je jinak bezvadný Fiddler. Pokud ho vypnu, vše začne fungovat.
Pokud ladíte projekt s WCF client-server komunikací (WCF SOAP), může se hodit možnost zachytávat tuto komunikaci ve Fiddleru.
Mnoho návodů vám pomůže nastavit Fiddlera jako proxy, pokud chcete zachytávat komunikaci svého WCF clienta se vzdálenou webovou službou. Pokud však serverovou stranu sami vyvíjíte a běží vám právě na localhost, postup dle těchto návodů vám komunikaci nezachytí.
Je potřeba na straně WCF clienta nastavit adresu cílových endpointů pomocí “localhost.fiddler:port”, všude tam, kde dosud máte “localhost”:
<system.serviceModel> <client> <endpoint address="http://localhost.fiddler:12890/WebServices/MyService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService" contract="MyApp.IMyService" name="BasicHttpBinding_IMyService"/> </client> </system.serviceModel>
Kde jsou ty časy, kdy člověk pustil Fiddler Web Debugger a mohl v něm poklidně ladit svojí webovou aplikaci, aniž by se musel probírat stovkami HTTP requestů generovaných ostatními aplikacemi. Dnes je HTTP protokol natolik oblíbený, že použití Fiddler již není tolik pohodlné.
Naštěstí je možné Fiddlerovi říct, jaké requesty má ignorovat (resp. skrýt z UI, “odbavení” nadále provádí). Děje se tak např. prostřednictvím FiddlerScriptu, kde ve funkci OnBeforeRequest můžeme nastavit (výstřižek ze začátku funkce):
static function OnBeforeRequest(oSession: Session) { if ( (oSession.hostname == "tfs.havit.eu") || (oSession.hostname == "outlook.office365.com") || (oSession.hostname == "havit.sharepoint.com") || (oSession.hostname == "tfs.havit.eu") || (oSession.hostname == "vortex.data.microsoft.com") || (oSession.hostname == "nexus.officeapps.live.com") || (oSession.hostname == "client-api.itunes.apple.com") || (oSession.hostname == "iadsdk.apple.com") || (oSession.hostname == "roaming.officeapps.live.com") || (oSession.hostname == "mobile.pipe.aria.microsoft.com") || (oSession.hostname == "play.itunes.apple.com") ) { oSession["ui-hide"]="yup"; } // pokračování funkce
FiddlerScript najdeme v menu Rules pod volbou Customize Rules… “Ideálně” se edituje prostřednictvím FiddlerScript Syntax Highlight doplňku (na jeho instalaci se ptá Fiddler při otevírání položky Customize Rules…):
Kromě oSession.hostname můžeme použít i plné oSession.url, nebo další možnosti poskytovaného FiddlerScript API.
Fiddler je výborný nástroj pro zachytávání HTTP provozu – zobrazí Vám přesnou podobu HTTP requestu a responsu, kterou Váš počítač dělá vůči webovým serverům.
Ve skutečnosti Fiddler funguje jako proxy-server. Při spuštění se nastaví v Internet Options jako proxy a veškeré běžné požadavky tak jdou přes něj. Problém je v tom, že ne zas tak úplně veškeré, Innternet Explorer i .NET Framework natvrdo směřují veškeré požadavky na „localhost“ a „127.0.0.1“ mimo proxy, přestože je proxy zapnutý i pro intranet.
První podmínkou pro zachytávání Fiddlerem je tedy používat pro browsing adresu v podobě http://mujpocitac:1234/MyPage.aspx, čímž jdou takové požadavky přes proxy a dostane je Fiddler.
Další problém je však v tom, že ASP.NET Web Development Server (Visual Studio, Web Developer Express, …) přijímá požadavky pouze na „localhost“ a ostatní zamítá.
Řešením je překlad adresy ve Fiddleru. Fiddleru můžeme přidat pravidlo, aby požadavky na „mujpocitac“ převáděl na podobu „localhost“. Do CustomRules.js (Rules ~ Customize rules…) přidáme na začátek události BeforeRequest:
static function OnBeforeRequest(oSession:Fiddler.Session) { oSession.host = oSession.host.replace("mujpocitac", "localhost"); }
…a je to.
(Samozřejmě ten překlad by se dal udělat i odolnější, aby fungovaly i adresy http://mujpocitac/mujpocitac/mujpocitac.aspx a nebylo z nichhttp://localhost/localhost/localhost.aspx)
Ve Windows Vista je mimo výše uvedeného potřeba ještě ve Fiddleru v Options vypnout volbu „Enable IPv6“.