Ситуация: 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"]