Jak mogę określić, kiedy usługa internetowa jest dostępna (on-line)? w Delphi lub C#?Określ, kiedy usługa internetowa jest dostępna.
Odpowiedz
Wystarczy wykonać prawidłowe połączenie z serwisem WWW. Jeśli przekroczy limit czasu lub wystąpi błąd 404, usługa internetowa nie jest dostępna.
Spróbuj go użyć. Jeśli to działa, to jest dostępne. Jeśli nie, to nie jest (lub masz problemy z połączeniem sieciowym między tobą a serwerem). Tu nie ma żadnej magii.
Można spróbować tej metody ..
public bool IsAddressAvailable(string address)
{
try
{
using(System.Net.WebClient client = new WebClient())
{
client.DownloadData(address);
return true;
}
}
catch
{
return false;
}
}
... i nazwać tak ...
MessageBox.Show(IsAddressAvailable("http://localhost/my.webservices/mywebservice.asmx").ToString());
Wreszcie napisałem ten kod w Delphi .NET
function WebService_OnLine(UrlWebService:String): Boolean;
Var
urlCheck : uri;
request : WebRequest;
response : WebResponse;
begin
MemoLogWebService.Lines.Add('Testing WebService');
urlCheck := Uri.Create(UrlWebService);
request := WebRequest.CreateDefault(urlCheck);
request.Timeout := 20000;
try
response :=request.GetResponse();
MemoLogWebService.Lines.Add(response.Headers.ToString);
Result:=True;
except
on E : Exception do
Begin
MemoLogWebService.Lines.Add(E.Message);
Result:=False;
End;
end;
End;
PS: Dziękuję bardzo za udzielenie mi inspiracji.
Należy zawęzić pułapkę wyjątków do wyjątków opartych na komunikacji. Rzadko, jeśli chcesz złapać wyjątek, ponieważ może to być katastrofalny błąd i wyjątki związane z komunikacją. –
Podoba mi się (i wykorzystałem to, dziękuję!), Ale sugerowałbym dodanie instrukcji USING podczas tworzenia obiektu klienta. Zwłaszcza, że jest to ping, który będzie używany dużo, ważne jest, aby go usunąć. –
Tak. Odpowiednio zaktualizuję swoją odpowiedź. – lkg