2011-07-02 6 views
1

J'ai un problème étrange en utilisant HttpWebRequest, j'essaye de signaler une chaîne à un service mais HttpWebResponse continue à produire l'erreur suivante;HttpWebResponse erreur, pas trouvé

"System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)\r\n at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass2.<EndGetResponse>b__1(Object sendState)\r\n at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)\r\n at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n at System.Delegate.DynamicInvokeOne(Object[] args)\r\n at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)\r\n at System.Delegate.DynamicInvoke(Object[] args)\r\n at System.Windows.Threading.Dispatcher.<>c__DisplayClass4.<FastInvoke>b__3()\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)\r\n at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n at System.Delegate.DynamicInvokeOne(Object[] args)\r\n at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)\r\n at System.Delegate.DynamicInvoke(Object[] args)\r\n at System.Windows.Threading.DispatcherOperation.Invoke()\r\n at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)\r\n at System.Windows.Threading.Dispatcher.OnInvoke(Object context)\r\n at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)\r\n at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)\r\n at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)\r\n\r\n at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)\r\n at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n at ZabbixClient.MainPage.ResponseCallBack(IAsyncResult result)\r\n at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2)\r\n at System.Threading.ThreadPool.WorkItem.doWork(Object o)\r\n at System.Threading.Timer.ring()\r\n" 

Mon code ressemble;

private void btnSignin_Click(object sender, RoutedEventArgs e) 
    { 
     // Prepare web request... 
     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(new Uri("http://monitor.co.uk", UriKind.Absolute)); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/x-www-form-urlencoded"; 
     myRequest.BeginGetRequestStream(new AsyncCallback(RequestCallBack), myRequest); 
    } 

void RequestCallBack(IAsyncResult result) { 
     HttpWebRequest myRequest = result.AsyncState as HttpWebRequest; 

     //need error checking for this part 
     Stream stream = myRequest.EndGetRequestStream(result); 

    using (StreamWriter sw = new StreamWriter(stream)){ 

     sw.Write("{ \"jsonrpc\":\"2.0\",\"method\":\"user.authenticate\",\"params\":{\"user\":\"<login>\",\"password\":\"<password>\"},\"id\":2}"); 
    } 
    myRequest.BeginGetResponse(ResponseCallBack, myRequest); 
    } 

void ResponseCallBack(IAsyncResult result) 
    { 
     //get to the request object 
     HttpWebRequest myRequest = result.AsyncState as HttpWebRequest; 
     try 
     { 
      //need error checking here 
      HttpWebResponse response = myRequest.EndGetResponse(result) 
       as HttpWebResponse; 
      using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
      { 
       System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(sr.ReadToEnd()); }); 
      } 
     } 
     catch (WebException webExcp) 
     { 
      System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(webExcp.ToString()); }); 
     } 
    } 

Je ne peux pas comprendre ce qui se passe, l'URL est spécifiée correctement et de travail, je lis à utiliser du violon pour surveiller ce qui se passait, mais rien ne semble en Fiddler suggérant qu'il est même pas arriver à faire demande? Toute information serait appréciée. Merci!

+0

Je viens de remarquer que vous envoyez des données JSON, mais la mise en-tête ContentType de la demande « application/x-www-form-urlencoded ». Est-ce ce que le serveur attend? –

Répondre

3

D'abord, permettez-moi de signaler un problème dans votre code:

using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
{ 
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(sr.ReadToEnd()); }); 
} 

Le flux sera fermé au moment où vous allez tenter d'afficher le résultat. Ce que vous devez faire est d'avoir quelque chose comme ceci:

using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
{ 
    String s = sr.ReadToEnd(); 
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(s); }); 
} 

Pourtant, je ne sais pas pourquoi vous voulez afficher la réponse dans une instance MessageBox - il sera essentiellement illisible - utiliser la console Output à des fins de débogage.

Retour au sujet - NotFound est généralement retourné par le serveur et n'a rien à voir avec la demande en cours de traitement par le système d'exploitation. C'est une erreur très générique et vous devez vous assurer que ce que vous appelez est pris en charge à l'autre extrémité. Assurez-vous que vous avez une bonne connexion Internet (sur une note de côté)

+0

merci pour votre réponse, j'utilisais juste la boîte de message pour des raisons de débogage. Les seules erreurs que je peux voir dans le bit de sortie sont; Une exception de première occurrence de type 'System.IO.FileNotFoundException' s'est produite dans mscorlib.dll Une exception de première occurrence de type 'System.Net.WebException' s'est produite dans System.Windows.dll Une exception de première chance de type 'System.Net .WebException 's'est produite dans System.Windows.dll – Nathan

+0

J'ai juste utilisé votre code (montré ci-dessus) dans un nouveau projet. Aucune erreur de ce genre n'est apparue. Vous pourriez avoir quelque chose d'autre dans le projet qui empêche une exécution correcte (comme indiqué par d'autres exceptions). Dès la demande - êtes-vous sûr que le serveur peut traiter votre demande? –

+0

J'utilise Windows Phone SDK, version 7.1 Bêta 2. Quelle version utilisez-vous? – Nathan

1

J'ai eu le même problème.

J'ai un serveur proxy et le problème commence ici. J'ai démarré l'émulateur puis j'ai activé et désactivé le serveur proxy. Je découvre que lorsque l'émulateur est déclaré, il conserve les configurations proxy, même si vous changez le proxy, il conserve toujours les configurations inicial. Ensuite, j'ai désactivé le proxy, j'ai lancé l'émulateur et mon application a parfaitement fonctionné. Windows Phone 7.1 httpWebRequest ne fonctionne pas correctement avec proxy. Je n'ai pas eu le même problème en utilisant Windows Phone 7 httpWebRequest. Je viens de rencontrer ce problème après la conversion de mon application Windows Phone 7 à Windows Phone 7.1.

L'espoir peut vous aider à