2010-07-25 12 views
2

J'appelle un service REST via http qui renvoie un flux comme réponse. Mon code client ressemble à ceci:Silverlight 4 Lancer HttpWebRequest ProtocolViolationException

   Uri uri = new Uri(remoteAddress); 
       var webRequest = (HttpWebRequest)WebRequest.Create(uri); 
       webRequest.Method = "GET"; 
       webRequest.ContentType = "multipart/mixed"; 
       webRequest.BeginGetResponse(responseResult => 
       { 
        HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(responseResult); 
        this.messages = ParseResponse(response); 
        Complete(false); 
       }, null); 

Je reçois l'erreur suivante sur cette ligne:

HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(responseResult); 

System.Net.ProtocolViolationException était non gérée par le code utilisateur message = Le fonctionnement est pas valide en raison de l'état actuel de l'objet. StackTrace: à System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, état d'objet) à System.Net.Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) à LaharSubProxy.SubscribeAsyncResult`1. <> c__DisplayClass1.b__0 (IAsyncResult responseResult) à System.Net.Browser.BrowserHttpWebRequest. <> c__DisplayClassd.b__b (Object état2) à System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (état de l'objet) à System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback rappel, objet état, Boolean ignoreSyncCtx) à System.Threading. QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() à System.Threading.ThreadPoolWorkQueue.Dispatch() à System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() InnerException:

Cela me conduit absolument noix puisque l'exception est ne pointant vers rien d'utile. J'ai activé l'option "streaming" dans fiddler mais je ne vois aucun trafic/erreur.

Aidez s'il vous plaît!

Répondre

1

Eh bien whatdya sait, le problème est cette ligne:

webRequest.ContentType = "multipart/mixed"; 

On dirait que c'est un bug SL/nuance. J'ai commenté cette ligne et l'erreur disparaît! Je devrais aussi ajouter que le code tel qu'il est fonctionne très bien dans une application console/windows traditionnelle.

This post m'a indiqué la bonne direction. Merci Microsoft !!!!!!

0

La définition de la propriété ContentType implique que vous allez fournir un corps de message avec votre requête. Il semblerait que les bibliothèques .net ne veulent pas autoriser cela, bien que je ne puisse trouver rien dans la spécification HTTP pour suggérer qu'il devrait être fobidden.