Unter Windows kann man mit zwei Weisen auf eine Webseite zugreifen.
Es gibt den älteren WebRequest und das neuere HttpClient.
Unter WPF verwendet man oft das WebRequest, weil dieser Zugriff auch ftp-Seiten erlaubt. Beim Wechsel von WPF auf UWP hängt sich der WebRequest aber leider sehr oft auf und bereitet oft Probleme.
1) UWP-Webrequest: Synchroner Zugriff
Fehlerbeschreibung:
Beim Zugriff auf eine Webseite mit WebRequest erscheint im Synchronen Modus die Fehlermeldung:
The operation was canceled |
Ursache:
Zunächst unbekannt… allerdings zeigt es wahrscheinlich auf eine Weiterleitung der Webseite hin. Wenn zum Beispiel eine URL Adresse mit dem / endet, leiten die Webseiten die Seite aus lesbarkeitsgründen intern um.
Name |
Value |
Type |
|
◢ |
ex |
{System.OperationCanceledException: The operation was canceled. at System.Net.HttpWebRequest.GetResponse() at robot_ComputerFutures.MainPage.<Web_Get_HtmlDocument>d__6.MoveNext()} |
System.Exception {System.OperationCanceledException} |
▶ CancellationToken |
IsCancellationRequested = true |
System.Threading.CancellationToken |
|
▶ Data |
{System.Collections.ListDictionaryInternal} |
System.Collections.IDictionary {System.Collections.ListDictionaryInternal} |
|
HResult |
-2146233029 |
int |
|
HelpLink |
null |
string |
|
▶ InnerException |
null |
System.Exception |
|
Message |
"The operation was canceled." |
string |
|
Source |
"System.Net.Requests" |
string |
|
StackTrace |
" at System.Net.HttpWebRequest.GetResponse()\r\n at robot_ComputerFutures.MainPage.<Web_Get_HtmlDocument>d__6.MoveNext()" |
string |
|
▶ TargetSite |
{System.Net.WebResponse GetResponse()} |
System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo} |
2) UWP-Webrequest: Asynchroner Zugriff
objRequest.GetResponseAsync
Beim Verwendern der Asynchronen Methode springt der Cursor zwischen beiden Aufrufen im Loop und behindert die Anwendung.
//* get the HTML Document of a website-URL try { //-< init >- //< WebRequest and Response > WebRequest objRequest = WebRequest.Create("https://www.computerfutures.com/de/job/Project-Manager-39"); objRequest.Timeout = 15; WebResponse objResponse = null; try { objResponse = await objRequest.GetResponseAsync(); } catch (Exception ex) { clsSys.show_Message(ex.Message); return null; }
//</ WebRequest and Response >
//< Stream and Reader > Stream objDataStream = objResponse.GetResponseStream(); StreamReader TextReader = new StreamReader(objDataStream); //</ Stream and Reader > //-</ init >-
|
Problem:
3) UWP: webRequest-> Einstellung Redirect
AllowAutoRedirect in UWP
Ursache schein wohl zu sein, dass die Webseite einen Redirect macht.j
Allerdings hat der WebRequest in UWP keine Einstellung mehr für das Verhalten von Redirkt
//< WebRequest and Response > sURL = "https://www.computerfutures.com/de/job/Project-Manager-39"; WebRequest objRequest = WebRequest.Create(sURL); objRequest.AllowAutoRedirect = true; //*not in UWP objRequest.Timeout = 15; WebResponse objResponse = null; try { objResponse = await objRequest.GetResponseAsync(); } catch (Exception ex) { clsSys.show_Message(ex.Message); return null; } |
UWP: Universal Windows Platform
WPF: Windows Präsentation Foundation