C# 2008 SP1
Ich verwende diesen Code, um eine Verbindung zu unserer Kunden-Website herzustellen. Dies ist für eine Softphone-Anwendung. Bevor der Benutzer einen Anruf tätigt, muss das Softphone prüfen, ob eine aktive Internetverbindung besteht.
Ich habe also die httpWebRequest-Klasse verwendet, um eine Verbindung zur Website unserer Kunden herzustellen. Wenn die Antwort in Ordnung ist, kann die Internetverbindung hergestellt werden.
Allerdings habe ich festgestellt, dass die Antwort zu lange auf sich warten lässt. Ich bin mir nicht sicher, ob dies nicht ein sehr effizienter Weg zum Testen ist.
Wenn ich jedoch ihre Website aufrufe, dauert es weniger als eine Sekunde, bis die Seite geladen ist. Aber es dauert zu lange, wenn ich die Klasse HttpWebRequest verwende
Die Voraussetzungen dafür sind also:
In manchen Fällen wird ein Bevollmächtigter im Büro des Kunden eingesetzt. Dazu kann ich die TCPClient-Klasse nicht verwenden (hat keine Proxy-Eigenschaft).
Der Proxy unterstützt SOCKS nicht und kann daher die Klasse Sockets nicht verwenden.
Ich muss eine Timeout-Eigenschaft verwenden. Daher kann ich die WebClient-Klasse nicht verwenden. Der Grund dafür ist, dass das Softphone einfrieren würde, bis eine Antwort zurückgegeben wird. Also Timeout nach ein paar Sekunden.
Also die einzige, die mir einfällt, ist die Klasse HttpWebRequest.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
request.Timeout = 5000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("IsSIPServerAvailable: " + response.StatusCode);
isAvailable = true;
}
\======== Bearbeiten mit p \Invoke ====
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState_e : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
// In function for checking internet
InternetConnectionState_e flags = 0;
bool isConnected = InternetGetConnectedState(ref flags, 0);