質問

私は私がいくつかの問題を経験しているエンドポイントをテストしています。

毎時要求を実行するループ内のHttpClientを単に使用しています。

var httpClient = new HttpClient();
var message = httpClient.GetAsync(url).Result;
Console.WriteLine(message.StatusCode);
.

while inしばらくすると、この例外が発生しています。

system.net.http.httprequestException:送信中にエラーが発生しました リクエスト。---> System.Net.WebException:リモート名はできませんでした 解決される: 'xxx'

経験は例外の直後に、URLにアクセスすることができます。ブラウザでは、単にページを更新するだけで、すべてが良いです。

私はまだそれを経験しているユーザーからの報告を持っていないので、ここではローカルの問題であるかどうか疑問に思っていますが、診断を助けるために少し情報を使うことができます。

リモート名を解決できなかったをチェックすることができなかったかどうかを確認する方法は、DNSの問題またはWebサーバーの問題によって引き起こされますか?HttpCLientからより多くの情報を入手することも、より高度な診断ツールが必要ですか?

役に立ちましたか?

解決

ローカルネットワーク接続問題によって引き起こされる は(ただしDNSエラーも可能です)。残念ながらHResultは一般的ですが、HttpRequestExceptionをキャッチしてからInnerExceptionを検査することができます.WebExceptionの場合は、WebException.Statusプロパティを確認できます。


起こるかもしれません、あなたがすることができません。

常にWebExceptionStatus.NameResolutionFailure / tryブロックを使用してループ内に常に(ネットワーク関連)コードをラップすることをお勧めします(ここで他の溶眠操作)。既知の例外を処理し、少し待ってください(1000ミリ秒)、もう一度やり直してください(3回言う)。常に失敗した場合にのみ、ユーザーにエラーを辞め/報告できます。このような非常に生の例:

private const int NumberOfRetries = 3;
private const int DelayOnRetry = 1000;

public static async Task<HttpResponseMessage> GetFromUrlAsync(string url) {
    using (var client = new HttpClient()) {
        for (int i=1; i <= NumberOfRetries; ++i) {
            try {
                return await client.GetAsync(url); 
            }
            catch (Exception e) when (i < NumberOfRetries) {
                await Task.Delay(DelayOnRetry);
            }
        }
    }
}
.

他のヒント

サービスにアクセスしようとしているときにも同様の問題がありました(古いASMXサービス)。ただし、エイリアスで電話をかけたときにIPを介してアクセスすると、コールが機能します。リモート名を取得できませんでした。

設定に次のものを追加し、問題を解決しました:

<system.net>
    <defaultProxy enabled="true">
    </defaultProxy>
</system.net>
.

hosts ファイルを開きます。** C:\ Windows \ System32 \ Drivers \ etc **。

nofollownoreferrer"> hostsファイルは何ですか?

このファイルの最後に次のものを追加します。

yourserverip yourdns

例:

198.168.1.1 maps.google.com

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top