2011-01-30 14 views
6

Estoy intentando autenticarme contra la API de Huddle utilizando el emulador de Windows Phone 7. Sin embargo, no estoy teniendo éxito. Sigo recibiendo "El servidor remoto devolvió un error: NotFound". Incluso he intentado "embrutecer" mi código y simplemente intentar un sitio web directo, por ejemplo. Google pero aún obtiene el mismo resultado.HttpWebRequest que devuelve "El servidor remoto devolvió un error: NotFound" en Windows Phone 7

Tengo el siguiente código:

string url = "http://www.google.com"; 

HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest; 

client.AllowReadStreamBuffering = true; 

// Call and handle the response. 
client.BeginGetResponse(
    (asResult) => 
    { 
    Dispatcher.BeginInvoke(
    () => 
    { 
    try 
    { 
     var response = client.EndGetResponse(asResult); 
     System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()); 
     string responseString = reader.ReadToEnd(); 

    } 
    catch (WebException failure) 
    { 
     throw failure; 
    } 
    }); 
    }, 
    null 
); 

La ejecución siempre termina en la sección de captura. Sin embargo, después de haber visto Fiddler2, parece que no hay ningún tráfico en google.com. Entonces la solicitud no parece estar siendo hecha.

He visto un problema similar aquí Retrieve XML from https using WebClient/HttpWebRequest - WP7, pero estoy usando un puerto estándar, así que no estoy seguro de que esto sea relevante. También intenté simplificar el código según la publicación, pero no tuve éxito.

Curiosamente, la opción más probable parece ser porque tal vez no tiene capacidades de red definidos en mi archivo AppManifestWM.xaml según HttpWebRequest Breaks On WP7, pero mi archivo AppManifestWM.xaml parece tener esta definido:

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.0"> 
    <App xmlns="" ProductID="{ac5b5d62-573c-4134-b290-0ad4f678ad7f}" Title="xxx.WindowsPhone7.Client" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="xxx.WindowsPhone7.Client author" Description="Sample description" Publisher="xxx.WindowsPhone7.Client publisher"> 
    <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath> 
    <Capabilities> 
     <Capability Name="ID_CAP_NETWORKING" /> 
     <Capability Name="ID_CAP_LOCATION" /> 
     <Capability Name="ID_CAP_SENSORS" /> 
     <Capability Name="ID_CAP_MICROPHONE" /> 
     <Capability Name="ID_CAP_MEDIALIB" /> 
     <Capability Name="ID_CAP_GAMERSERVICES" /> 
     <Capability Name="ID_CAP_PHONEDIALER" /> 
     <Capability Name="ID_CAP_PUSH_NOTIFICATION" /> 
     <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" /> 
    </Capabilities> 
    <Tasks> 
     <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/> 
    </Tasks> 
    <Tokens> 
     <PrimaryToken TokenID="xxx.WindowsPhone7.ClientToken" TaskName="_default"> 
     <TemplateType5> 
      <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI> 
      <Count>0</Count> 
      <Title>xxx.WindowsPhone7.Client</Title> 
     </TemplateType5> 
     </PrimaryToken> 
    </Tokens> 
    </App> 
</Deployment> 

Entonces estoy perdido. La solicitud en realidad no parece estar ocurriendo, lo que me lleva a pensar que algo lo está impidiendo.

Actualización:

nada cambió, pero pensaron que esto podría Heko seguimiento de la pila:

System.Net.WebException was unhandled Message=The remote server returned an error: NotFound. StackTrace: at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at xxx.WindowsPhone7.Client.Views.AddHuddleUserPage.<>c__DisplayClass2.<>c__DisplayClass4.b__1() 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) at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) at System.Delegate.DynamicInvokeOne(Object[] args) at System.MulticastDelegate.DynamicInvokeImpl(Object[] args) at System.Delegate.DynamicInvoke(Object[] args) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority) at System.Windows.Threading.Dispatcher.OnInvoke(Object context) at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args) at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args) at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

El estado es System.Net.WebExceptionStatus.UnknownError

Gracias por su tiempo .

Respuesta

1

Ok, he resuelto ... pero no sé cómo. Mi máquina no ha sido reiniciada, mi código no ha cambiado. La única explicación posible es que mi emulador se bloqueó un par de veces. Tal vez algo allí.

Gracias por su tiempo, este es el código que estoy usando, que funciona bien con la API de Huddle:

   string url = "https://api.huddle.net/v1/xml/workspaces"; ; 

       HttpWebRequest client= WebRequest.CreateHttp(new Uri(url)) as HttpWebRequest; 

       client.Credentials = new NetworkCredential(ViewModel.UserAccount.UserName, ViewModel.UserAccount.Password); 
       client.AllowReadStreamBuffering = true; 

       // Call and handle the response. 
       client.BeginGetResponse(
        (asResult) => 
        { 
         Dispatcher.BeginInvoke(
          () => 
          { 
           try 
           { 
            var response = client.EndGetResponse(asResult); 
            System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()); 
            string responseString = reader.ReadToEnd(); 



                     } 
           catch (WebException failure) 
           { 
            MessageBox.Show(failure.Message, "Cannot authenticate", MessageBoxButton.OK); 
#if DEBUG 
            throw failure; 
#endif 
           } 
          }); 
        }, 
         null 
       ); 
0

Esto puede ser solo una cuestión de resolver su conectividad de red.

¿Se puede acceder a la web a través de IE y un control WebBrowser dentro de una aplicación?

Puede tener un proxy en el camino. Vea si este doco ayuda en ese sentido.

Proxy Support for Windows Phone Emulator

+0

Gracias, Mick. He probado el "applet" de IE dentro del sistema operativo, que funciona. También se agregó un control WebBrowser a la misma página, que también funciona bien. No estoy usando un proxy por lo que sé. –

2

¿Te has violinista correr? Recibo este error repetidamente cuando Fiddler está conectado a mi pila de red. Con Fiddler desactivado, no hay problemas.

Me interesaría saber el porqué de eso si alguien sabe ...

Saludos

+0

Punto interesante. No puedo recordar, ahora. Ciertamente lo hubiera tenido en un punto, pero al punto del fracaso, no podría decirlo. –

3

que trabajaron varias horas con los mismos síntomas exactos como el cartel original. Luego cerré Fiddler2 como se sugirió anteriormente. Y luego funciona. No más "El servidor remoto devuelto y el error: NotFound".

Magia! Gracias, kellyb. Debería haber votado a favor pero no tengo suficiente crédito.

2

Apagar Fiddler2 solucionó mi problema.

+0

gracias! Nunca pensé que esto podría ser ... – Thomas

6

nunca utilizado Fiddler2 pero tuvo exactamente el mismo problema la hora de desarrollar un teléfono aplicación de Windows.

Para mí la causa era bastante diferente: Los WMAppManifest.xml se acaba perdiendo ID_CAP_NETWORKING!

Desde que se hizo la excepción "no encontrado" y no un "no se admiten excepción" He intentado casi todo lo demás hasta que encontré la verdadera causa del problema ... ;-)

prefiero deshabilitar todos los CAPS y solo habilite los que la aplicación realmente necesita ya que los usuarios no entenderán/aceptarán si una aplicación necesita acceso a "todo" ;-)

Cuestiones relacionadas