У меня есть простой проект веб-API, основанный на этом примере: http://aspnet.codeplex.com/sourcecontrol/latest#Samples/WebApi/RelaySample/Program.cs
Однако в примере выше реле работает с локальным сервером, в моем проекте реле работает с внешним веб-сервером с реальным адресом; компанияX.com
Я использую службу ретрансляции (или службу веб-прокси) через браузер, например, в запросе браузера relayService.com/companyX. Служба ретрансляции отвечает данными с внешнего сайта companyX.com.
Ретранслятор работает отлично, однако некоторые заголовки неверны, и мне нужно посмотреть, что HttpClient отправляет на удаленный сервер companyX.com.
В fiddler или Charles указан только запрос/ответ от моего браузера к relayService.com, запрос/ответ от HttpClient к relayService.com никогда не появляется.
relayService.com работает локально на моей машине, в IIS7 я использую файл hosts для направления трафика на relayService.com.
Я пробовал несколько вариантов следующего при создании HttpClient:
var clientHandler = new HttpClientHandler
{
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false,
Proxy = new WebProxy("http://localhost:8888"),
UseProxy = true,
AutomaticDecompression = DecompressionMethods.GZip,
AllowAutoRedirect = false,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
HttpClient client = new HttpClient(clientHandler);
ОБНОВИТЬ
Если я изменю UseProxy = false
, служба продолжит работать, когда Fiddler открыт или закрыт.
С UseProxy = true
служба выйдет из строя, если скрипач открыт, я получаю следующую ошибку:
Object reference not set to an instance of an object.
at System.DomainNameHelper.IdnEquivalent(String hostname) at System.Net.HttpWebRequest.GetSafeHostAndPort(Uri sourceUri, Boolean addDefaultPort, Boolean forcePunycode) at System.Net.HttpWebRequest.GenerateProxyRequestLine(Int32 headersSize) at System.Net.HttpWebRequest.SerializeHeaders() at System.Net.HttpWebRequest.EndSubmitRequest() at System.Net.Connection.CompleteConnection(Boolean async, HttpWebRequest request)
С UseProxy = true
и скрипач ЗАКРЫТ, я получаю следующую (очевидную) ошибку:
No connection could be made because the target machine actively refused it 127.0.0.1:8888
В том же решении я использую HttpWebRequest для загрузки данных из Интернета, и это отображается в Fiddler, поэтому, похоже, это проблема с HttpClient.GetAsync().
Я пробовал это на двух машинах с одинаковыми результатами.
Я боролся с этим весь день, любая помощь будет высоко оценена.
Напомним: * relayService.com работает локально на моей машине в IIS7.
файл hosts имеет "127.0.0.1 relayService.com"
relayService.com — это сайт веб-API MVC, который использует HttpClient.GetAsync() для загрузки контента из Интернета.
Fiddler/Charles работает локально на той же машине
трафик браузера на локальный relayService.com отображается в Fiddler/Charles
HttpClient.GetAsync() для живого веб-трафика не отображается в Fiddler/Charles
Fiddler/Charles — обновленные версии.
Спасибо еще раз