Pregunta

Estamos usando el Live Connect SDK 5.0 Para recuperar imágenes de SkyDrive desde nuestra aplicación Windows Phone 7.5.

El código de aplicación (simplificado) a continuación solía trabajar hasta hace unos días. Ahora, cuando intentamos acceder a ImageStream (o cualquier otra información capturada en una devolución de llamada) obtenemos un System.argumento Excepción (hResult = -2147024809, "Valor no se encuentra dentro del rango esperado", pero como de costumbre no se menciona el valor ofensivo). Verificamos nuestra base de código y no hubo cambios de código en esta área del producto recientemente.

¿Hubo algún cambio de API? ¿Hay alguna manera (violinista, pero para las aplicaciones no es decir) inspeccionar el tráfico de red con la esperanza de que se transmita más información desde el servidor? ¿Hay algún valor local que se esté almacenando en caché que pueda interferir?

Aquí está el código relevante:

public partial class OptionsPage : PhoneApplicationPage
{
    private LiveConnectClient _liveClient = null;

    public OptionsPage()
    {
        InitializeComponent();
    }

    private void OnSessionChanged(Object sender, LiveConnectSessionChangedEventArgs args)
    {
        if (args != null && args.Session != null && args.Session.Status == LiveConnectSessionStatus.Connected)
        {
            this._liveClient = new LiveConnectClient(args.Session);
        this.GetUserPicture();
        }
    }

    private void GetUserPicture()
    {
        var memoryStream = new MemoryStream();
        _liveClient.DownloadCompleted += new EventHandler<LiveOperationCompletedEventArgs>(this.GetUserPictureCallback);
        _liveClient.DownloadAsync("/me/picture?return_ssl_resources=true", memoryStream, memoryStream);
    }

    private void GetUserPictureCallback(object sender, LiveOperationCompletedEventArgs e)
    {
        _liveClient.DownloadCompleted -= this.GetUserPictureCallback;

        try
        {
            if (e.Error == null)
            {
                MemoryStream imageStream = e.UserState as MemoryStream;
                BitmapImage b = new BitmapImage();
                b.SetSource(imageStream);
            }
            else
            {
                MessageBox.Show(e.Error.Message, "Windows Live Error", MessageBoxButton.OK);
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "SkyDrive Exception", MessageBoxButton.OK);
        }
    }
}

Y el SigninButton se define de la siguiente manera:

        <live:SignInButton Content="Button" Height="65" HorizontalAlignment="Left" Margin="110,41,0,0"
            Name="signInButton1" VerticalAlignment="Top" Width="215" ClientId="[REAL_CLIENT_ID]" 
            Scopes="wl.offline_access wl.signin wl.basic wl.skydrive wl.skydrive_update"
            RedirectUri="https://oauth.live.com/desktop"
            Branding="Skydrive"
            TextType="SignIn"
            Background="Red"
            SessionChanged="OnSessionChanged" />
¿Fue útil?

Solución

Parece que estaba usando la versión beta del Live Connect SDK 5.0. Una vez que actualicé a la versión RTM (e hice los cambios de código requeridos), comenzó a funcionar nuevamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top