この例に基づいた単純な Web API プロジェクトがあります: http://aspnet.codeplex.com/sourcecontrol/latest#Samples/WebApi/RelaySample/Program.cs
ただし、上記のサンプルでは、リレーはローカル サーバーで動作しています。私のプロジェクトでは、リレーは実際のアドレスを持つ外部 Web サーバーで動作しています。companyX.com
ブラウザ経由でリレー サービス (または Web プロキシ サービス) を使用しています (たとえば、ブラウザ リクエストの relayService.com/companyX)。リレー サービスは、外部の companyX.com サイトからのデータで応答します。
リレーはうまく機能しますが、一部のヘッダーが正しくないため、HttpClient がリモートの companyX.com サーバーに何を送信しているかを確認する必要があります。
フィドラーまたはチャールズでは、ブラウザから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 を使用して Web からデータをダウンロードしていますが、それが Fiddler に表示されるため、HttpClient.GetAsync() に問題があるようです。
2台のマシンでこれを試しましたが、同じ結果が得られました。
私は一日中これに苦労してきました。どんな助けでも大歓迎です。
要約すると: * RelayService.com は、IIS7 の私のマシンでローカルに実行されています。
hostsファイルには「127.0.0.1 relayService.com」があります
RelayService.com は、HttpClient.GetAsync() を使用してライブ Web からコンテンツをダウンロードする MVC Web API サイトです。
Fiddler/Charles は同じマシンでローカルに実行されています
ローカルの RelayService.com へのブラウザ トラフィックが Fiddler/Charles に表示される
ライブ Web トラフィックへの HttpClient.GetAsync() が Fiddler/Charles に表示されない
Fiddler/Charles はどちらも最新バージョンです。
再度、感謝します