2009-12-02 16 views
0

Je joue avec Silverlight 4, et moi quand mes chargement de la page, j'appelleProblème d'authentification possible? Chargement d'un JSON via WebClient dans Silverlight 4

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

que je l'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, il déclenche une exception. Il est la même exception que je reçois quand j'essayé d'utiliser 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, comment je peux faire l'authentification de base que est mis en œuvre et obtenir ma demande d'aller?

Vive

Nik

Répondre

1

Basé sur Mark Monster's post here vous ratent quelques lignes de code dans votre méthode de beginGet. Il 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)); 
} 

En outre, si vous essayez juste d'obtenir JSON du serveur, vous devriez être en mesure d'utiliser DownloadStringAsync au lieu de OpenReadAsync qui pourrait simplifier les choses.

+0

Merci beaucoup, je vais essayer :-) – niklassaers

+0

C'était un super blog de Mark. Je lui ai envoyé un commentaire, parce que je n'ai pas son exemple à travailler, mais quand je l'ai mis au travail, ça a l'air génial. :-) – niklassaers