C# webrequest, obsługa braku połączenia

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

request.Method = "HEAD";

System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();

response.Close();

Jak teraz obsłużyć brak połączenia ? Mam treat właśnie z tym. W wypadku braku odpowiedzi ze strony serwera / braku połączenia z netem program mi się crashuje :slight_smile:

Może coś źle robię ?

try{} catch(){}

Sam kod jest OK. Teraz musisz rozszerzyć go o obsługę wyjątków (blok try/catch/finally). Materiałów w sieci na ten temat jest dość sporo, więc ja się tu nie będę produkował. Naprowadzę Cię jednak od razu na odpowiedni dla Twojej sytuacji przykład http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx. Nie jest on do końca poprawny, bo zwalnianie zasobów (w tym wypadku wywołanie metody Close()) musi zawsze następować w sekcji finally. Ostatecznie może to wyglądać np. tak:

HttpWebRequest myHttpWebRequest = null;

HttpWebResponse myHttpWebResponse = null;


try

{

    string url = "invalid site";


    myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);

    myHttpWebRequest.Method = "HEAD";


    myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

}

catch (WebException ex)

{

    //TODO:

    Console.WriteLine("Status: {0}\nKomunikat: {1}", ex.Status, ex.Message);

}

catch (Exception ex)

{

    //TODO:

    Console.WriteLine("Komunikat: {0}", ex.Message);

}

finally 

{

    if (myHttpWebResponse != null)

        myHttpWebResponse.Close();

}