3

これが状況です。自宅のマシン(プロキシサーバーとWindowsのデフォルトファイアウォールなし)からローカルホストでテストし、仕事に来たときにapi.flickr.com xmlファイルを取得しています(ISAサーバーを使用して接続します)。 「リモートサーバーを解決できませんでした」というメッセージが表示されるので、これらの行をweb.configに追加しました

<system.net>
  <defaultProxy>
   <proxy
    usesystemdefault="False"
    proxyaddress="http://localhost"
    bypassonlocal="True"
     />
   <bypasslist>
    <add address="[a-z]+\.flickr\.com\.+" />
   </bypasslist>

  </defaultProxy>
 </system.net>

System.Net.WebException:リモートサーバーがエラーを返しました:(404)見つかりません。何が悪かったのか?ありがとう

4

2 に答える 2

4

ここには2つのシナリオが考えられます。

1:クライアントアプリ(コンソールやWinFormsなど)を構築していて、プロキシを介さずにWebClientまたはHttpWebRequestを使用してhttp:// localhostbypassonlocal="True"にアクセスする場合は、これを実行する必要があります。つまり、app.configは次のようになります。

<defaultProxy>
   <proxy
    usesystemdefault="False"
    bypassonlocal="True"
     />
  </defaultProxy>
 </system.net>

2:ただし、ASP.NETアプリ(http:// localhostで実行)をプロキシありまたはプロキシなしでURIを正しく解決できるようにする場合は、プロキシを設定する必要があります情報はweb.config(またはmachine.configにあるため、アプリのweb.configを変更する必要はありません)に正しく含まれているため、ASP.NETは、プロキシを実行しているかどうかを認識します。このような:

家:

<defaultProxy>
   <proxy
    usesystemdefault="False"
    bypassonlocal="True"
     />
  </defaultProxy>
 </system.net>

仕事:

<defaultProxy>
   <proxy
    usesystemdefault="False"
    proxyaddress="http://yourproxyserver:8080"
    bypassonlocal="True"
     />
  </defaultProxy>
 </system.net>

プロキシ自動検出を使用したり、レジストリから設定を取得したりすることも可能ですが、私は常にサーバーアプリに対するこれらのアプローチを避けてきました...脆弱すぎます。

ところで、正しく構成されていてもエラーが発生する場合は、最初に、構成に依存するのではなく、WebClient/HttpWebRequest呼び出しの前にプロキシを手動で設定するクイックテストをコーディングすることをお勧めします。やれ。このような:

WebProxy proxyObject = new WebProxy("http://proxyserver:80/",true);
WebClient wc = new WebClient();
wc.Proxy = proxyObject;
string s = wc.DownloadString ("http://www.google.com");

コードを使用している場合でも、リクエストが作業プロキシを正しく通過しない場合は、プロキシがコードで正しく構成されていても、プロキシ自体に問題がある可能性があります。

于 2009-11-22T23:32:58.973 に答える
1

WebClientでは、ローカルからデータをダウンロードするのに問題はありませんが、インターネットからのダウンロードには問題があるため、次のように構成します。

Web.configに以下の行を追加し、インターネットプロキシのアドレスポートを置き換えます

<system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy usesystemdefault="False" proxyaddress="http://your proxy address:port" bypassonlocal="True" />
    </defaultProxy>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>   </system.net>

これで、プログラムロジックがインターネットおよびパブリックURLからコンテンツをダウンロードするために機能します。

于 2014-09-25T08:59:13.667 に答える