Проблемы с доступом к SkyDrive из Windows Phone 7 - PullRequest
0 голосов
/ 13 января 2012

Мы используем Live Connect SDK 5.0 для извлечения изображений из SkyDrive из нашего приложения Windows Phone 7.5.

Код приложения (упрощенный) ниже работал до того, как несколько дней назад .Теперь, когда мы пытаемся получить доступ к imageStream (или любой другой информации, захваченной в обратном вызове), мы получаем System.Argument исключение (HResult = -2147024809, "Значение не попадает в ожидаемый диапазон"), но, как обычно, значение обидчика не упоминается).Мы проверили нашу кодовую базу, и в последнее время в этой области продукта не было никаких изменений кода.

Были ли какие-либо изменения API?Есть ли способ (Fiddler, но для приложений, а не IE) для проверки сетевого трафика в надежде, что с сервера будет передано больше информации?Существуют ли кэшируемые локальные значения, которые могут помешать?

Вот соответствующий код:

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);
        }
    }
}

И SignInButton определяется следующим образом:

        <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" />

1 Ответ

0 голосов
/ 14 января 2012

Похоже, что я использовал бета-версию Live Connect SDK 5.0.Как только я обновился до версии RTM (и сделал необходимые изменения кода), он снова начал работать.

...