0 votes

Problème d'authentification possible ? Chargement d'un JSON via WebClient dans Silverlight 4

Je joue avec Silverlight 4, et quand ma page se charge, j'appelle

beginGet("my/people/", new OpenReadCompletedEventHandler(continueLoadStamData));

que j'ai défini comme

private void beginGet(string endpoint, OpenReadCompletedEventHandler callback)
{
  WebClient wc = new WebClient();
  wc.Credentials = new NetworkCredential(username, password);
  wc.OpenReadCompleted += callback;
  wc.OpenReadAsync(new Uri(baseURL + endpoint));
}

et continueLoadStamData()

void continueLoadStamData(object sender, OpenReadCompletedEventArgs e)
{
  JsonObject root = (JsonObject)JsonObject.Load(e.Result);
}

Mon problème est que lorsque j'arrive à e.Result, une exception est levée. Il s'agit de la même exception que lorsque j'ai essayé d'utiliser la commande WebRequest req = ...; req.Credentials = new NetworkCredential(username, password) :

{System.Reflection.TargetInvocationException: An exception occurred during the operation, making the result invalid.  Check InnerException for exception details. ---> System.Net.WebException: An exception occurred during a WebClient request. ---> System.NotImplementedException: This property is not implemented by this class.
   at System.Net.WebRequest.set_Credentials(ICredentials value)
   at System.Net.WebClient.GetWebRequest(Uri address)
   at System.Net.WebClient.OpenReadAsync(Uri address, Object userToken)
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at System.Net.OpenReadCompletedEventArgs.get_Result()
   at JSONSample.MainPage.continueLoadStamData(Object sender, OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
   at System.Net.WebClient.OpenReadOperationCompleted(Object arg)}

Avez-vous une idée de ce qui se passe, de la manière dont je peux m'assurer que l'authentification de base est mise en œuvre et faire aboutir ma requête ?

Cheers

Nik

1voto

Bryant Points 7185

Sur la base de Le post de Mark Monster ici il manque quelques lignes de code dans votre méthode beginGet. Cela devrait être quelque chose comme :

private void beginGet(string endpoint, OpenReadCompletedEventHandler callback)
{
  WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);  
  WebClient wc = new WebClient();  
  wc.Credentials = new NetworkCredential(username, password);
  wc.UseDefaultCredentials = false; 
  wc.OpenReadCompleted += callback;  
  wc.OpenReadAsync(new Uri(baseURL + endpoint));
}

De plus, si vous essayez simplement de récupérer le JSON du serveur, vous devriez pouvoir utiliser DownloadStringAsync au lieu de OpenReadAsync, ce qui pourrait simplifier les choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X