Ситуация: ASP.NET Development Server работает по адресу http://localhost:3840; требуется перехватить все запросы и ответы сервера.
Решение:
1) во всех адресах заменить "localhost" на "ipv4.fiddler". Например, вместо http://localhost:3840/Provider.svc/Now указать http://ipv4.fiddler:3840/Provider.svc/Now
2) запустить Fiddler (см. Install Fiddler2).
Запросы можно увидеть в окне Fiddler'а во вкладке Session Inspector - Raw, а на ответы можно посмотреть в нижней части вкладки, также нажав Raw.
ASP.NET Development Server находится в C:\Program Files\Common Files\microsoft shared\DevServer\9.0\WebDev.WebServer.EXE; параметры передаются через командую строку, например: /port:3840 /path:"С:\Projects\Site" /vpath:"/".
Сам веб-сервер - это класс Microsoft.VisualStudio.WebHost.Server, который помещен в GAC (WebDev.WebHost.dll).
Путь к файлу можно выяснить с помощью Process Monitor'а (см. Sysinternals Process Utilities). Открыть файл в проводнике не получится, но можно его предварительно скопировать с помощью copy в Command Prompt.
Показаны сообщения с ярлыком Fiddler. Показать все сообщения
Показаны сообщения с ярлыком Fiddler. Показать все сообщения
Как перехватить трафик ASP.NET Development Server'а
пятница, 24 апреля 2009 г.,
Ярлыки:
Тестирование,
ASP.NET,
Fiddler
Тестируем работу клиента web-сервера
суббота, 18 апреля 2009 г.,
Ярлыки:
Тестирование,
Fiddler
Протестировать работу клиента веб-сервера можно без самого веб-сервера. Достаточно установить Fiddler (см. Install Fiddler2) - это прокси с AutoResponder'ом. Автором Fiddler'а является Eric Lawrence - сотрудник Microsoft.
Предположим, что по адресу http://getvaluetest.ru расположен сайт, который на любой запрос присылает следующий http-ответ:
Сайта не существует, поэтому надо сохранить http-ответ в текстовый файл, например, c:\temp\200.txt, запустить Fiddler, в правой панели стать на AutoResponder и нажать кнопку Add. В левом поле Rule Editor указать http://GetValueTest.ru, а в правом поле - c:\temp\200.txt, нажать Save.
В приложение надо добавить слудующий код:
Ниже приводятся класс HttpResponse и его методы расширения:
Предположим, что по адресу http://getvaluetest.ru расположен сайт, который на любой запрос присылает следующий http-ответ:
| HTTP/1 |
| Date: Thu, |
| Set-Cookie: name1= |
| Set-Cookie: name2= |
| Content-Length: 6 |
| Content-Type: text/html; charset= |
| привет |
В приложение надо добавить слудующий код:
| HttpResponse hr = |
| // запросить через прокси ( |
| hr |
| System |
| public class HttpResponse |
| { |
| public NameValueCollection Headers { get; set; } |
| public string Contnet { get; set; } |
| public Exception Error { get; set; } |
| } |
| public static class HttpResponseHelper |
| { |
| public static void LoadFrom( |
| { |
| HttpWebRequest req = |
| req |
| req |
| try |
| { |
| using ( |
| { |
| if ( |
| { |
| // если в http-ответе не указан charset, |
| var encoding = |
| using ( |
| res |
| // копируем, |
| // учитывает запятые в значении "Set-Cookie" |
| res |
| } |
| } |
| } |
| catch ( |
| { |
| res |
| } |
| } |
| public static string Trace( |
| { |
| if ( |
| return hr |
| StringBuilder sb = |
| foreach ( |
| { |
| foreach ( |
| sb |
| } |
| sb |
| sb |
| return sb |
| } |
| } |
Вызов DomainService с веб-страницы
четверг, 9 апреля 2009 г.,
Ярлыки:
Fiddler,
JavaScript,
RIA Services,
XMLHttpRequest
Класс DomainService входит в состав .NET RIA Services и используется в качестве базового, для классов, обменивающихся данными с Silverlight-приложениями. Но данные можно передавать и получать также с помощью XMLHttpRequest.
[Class1.cs]
[Default.aspx]
Чтобы вызвать DomainService из Fiddler'а: 1) открыть закладку Request Builder 2) в выпадающем списке выбрать POST 3) указать адрес метода, например, http://ipv4.fiddler:5966/DataService.axd/Services-Test/Operation1 4) в поле Request Headers указать Content-Type: text/json 5) в поле Request Body указать [] 6) нажать Execute.
Для вызова метода Operation2 в поле Request Body надо указать, например, ["wow"]
- Создать проект: ASP.NET Web Application
- Добавить в References: System.Web.Ria и System.Web.DomainServices
- Добавить в проект файл Class1.cs (см. ниже)
- В Web.config в httpHandlers добавить:
<add path= "DataService .axd" verb= "GET, POST" type= "System .Web .Ria .DataServiceFactory, System .Web .Ria, Version= 2 .0 .0 .0, Culture= neutral, PublicKeyToken= 31BF3856AD364E35" validate= "false"/> - В Default.aspx заменить содержимое (см. ниже)
- Запустить приложение. В IE откроется веб-страница с двумя кнопками Operation1 и Operation2. В результате нажатия на кнопку будет создан POST запрос, который попадет в соответствующий метод в классе Test.
Результат запроса возвращается в JSON-формате:
{"__type":"DataServiceResult:DomainServices", "IsDomainServiceException":false, "ReturnValue":"Hello 123"}
[Class1.cs]
| using System |
| using System |
| using System; |
| namespace Cognitex |
| { |
| [EnableClientAccess] |
| public class Test : DomainService |
| { |
| [ServiceOperation] |
| public string Operation1( |
| { |
| return "Ticks: " + DateTime |
| } |
| [ServiceOperation] |
| public string Operation2( |
| { |
| return "Hello " + value; |
| } |
| } |
| } |
[Default.aspx]
| <%@ Page Language= |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 |
| <html xmlns= |
| <head id= |
| <title></title> |
| <script language= |
| function Operation1( |
| var r = |
| r |
| r |
| r |
| return r; |
| } |
| function Operation2( |
| var r = |
| r |
| r |
| r |
| return r; |
| } |
| function Trace( |
| var str = |
| for ( |
| _Msg |
| } |
| </script> |
| </head> |
| <body> |
| <button onclick= |
| <br /> |
| <input id= |
| <div id= |
| </body> |
| </html> |
Чтобы вызвать DomainService из Fiddler'а: 1) открыть закладку Request Builder 2) в выпадающем списке выбрать POST 3) указать адрес метода, например, http://ipv4.fiddler:5966/DataService.axd/Services-Test/Operation1 4) в поле Request Headers указать Content-Type: text/json 5) в поле Request Body указать [] 6) нажать Execute.
Для вызова метода Operation2 в поле Request Body надо указать, например, ["wow"]