Récupérer les données XML à partir de https à l'aide du client web/HttpWebRequest - WP7
Je suis en train de récupérer un document XML à partir d'un serveur et de les stocker localement comme une chaîne de caractères. Dans le bureau .Net je n'ai pas besoin, j'ai juste fait:
string xmlFilePath = "https://myip/";
XDocument xDoc = XDocument.Load(xmlFilePath);
Cependant sur WP7 ce retourne:
Cannot open 'serveraddress'. The Uri parameter must be a relative path pointing to content inside the Silverlight application's XAP package. If you need to load content from an arbitrary Uri, please see the documentation on Loading XML content using WebClient/HttpWebRequest.
J'ai donc mis sur l'utilisation du client web/HttpWebRequest exemple de ici, mais maintenant il est de retour:
The remote server returned an error: NotFound.
Est-ce parce que le XML est un https chemin? Ou parce que mon chemin n'a pas de fin .XML? Comment puis-je savoir? Merci pour toute aide.
Voici le code:
public partial class MainPage : PhoneApplicationPage
{
WebClient client = new WebClient();
string baseUri = "https://myip:myport/service";
public MainPage()
{
InitializeComponent();
client.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(
client_DownloadStringCompleted);
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
client.DownloadStringAsync
(new Uri(baseUri));
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
resultBlock.Text = "Using WebClient: " + e.Result;
else
resultBlock.Text = e.Error.Message;
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest request =
(HttpWebRequest)HttpWebRequest.Create(new Uri(baseUri));
request.BeginGetResponse(new AsyncCallback(ReadCallback),
request);
}
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request =
(HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response =
(HttpWebResponse)request.EndGetResponse(asynchronousResult);
using (StreamReader streamReader1 =
new StreamReader(response.GetResponseStream()))
{
string resultString = streamReader1.ReadToEnd();
resultBlock.Text = "Using HttpWebRequest: " + resultString;
}
}
}
Que pensez vous de voir si vous venez de couper et de coller l'URL de votre code sur un navigateur?
Une page XML, correctement mis en forme par Firefox. Comme ceci: w3schools.com/xml/simple.xml
Une page XML, correctement mis en forme par Firefox. Comme ceci: w3schools.com/xml/simple.xml
OriginalL'auteur JoeBeez | 2010-08-11
Vous devez vous connecter pour publier un commentaire.
Je pense plutôt que vous avez trop compliqué les choses. Ci-dessous est un exemple très simple qui demande un document XML à partir d'un URI via HTTPS.
Il télécharge le XML de manière asynchrone comme une chaîne de caractères et utilise ensuite
XDocument.Parse()
pour le charger.yep, déteste le dire, mais "fonctionne sur ma machine". Il peut être un cert question. Votre exemple de code comprend la spécification d'un port. Si vous spécifiez le protocole https comme le protocole et non de port standard cela peut être le problème. (J'ai connu HTTPS ont des problèmes à l'aide des ports autres que ceux par défaut sur d'autres plates-formes.)
Oui, le port allait être mon deuxième chose à vérifier quand je rentre à la maison un grand bravo à tous de votre aide.
Mais le problème est que si nous utilisons le client web, il s'exécute dans le thread de l'INTERFACE utilisateur. De son mieux pour aller de l'HttpWebRequest.
depuis la Mangue, WebClient retourne sur le fil, il a été appelé à partir. Il ne force pas la réponse sur le thread de l'INTERFACE utilisateur, sauf s'il est parti de là. Le ci-dessus est un exemple de la forme la plus simple, pas de la meilleure pratique.
OriginalL'auteur Matt Lacey