Использовать REST от Silverlight? - PullRequest
0 голосов
/ 09 октября 2010

Я создаю приложение Silverlight / Windows Azure.

Я пытаюсь прочитать некоторые простые данные из API REST, предоставляемые из веб-роли.

    private void MainPage_Loaded(object sender, RoutedEventArgs args)
    {
        // ...

        WebClient data = new WebClient();
        data.DownloadStringCompleted += new DownloadStringCompletedEventHandler(data_DownloadStringCompleted);
        data.DownloadStringAsync(new Uri("localhost:88/expenseservice.svc/expenses"));
    }

    void data_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error != null) 
        {
            MessageBox.Show(e.Error.Message);
            return;
        }

        XElement xmlStrs = XElement.Parse(e.Result);

        strBox.ItemsSource = xmlStrs.Descendants("ArrayOfstring");

    }

К сожалению, всегда происходит сбой со следующим сообщением:

NotSupportedException: «Префикс URI не распознан. "

Что я здесь не так делаю? Это жалуется на "localhost"? Есть ли более простой способ получить доступ к услугам, предоставляемым в моем собственном решении? (Возможно, для этого и используется «Добавить ссылку на службу»?)

Обновление Добавление http:// в URI делает его работоспособным. (Но, очевидно, это не сработает после развертывания в Azure?)

Просто использование относительного пути, например /expenseservice.svc/expenses, завершается неудачей со следующим исключением:

System.UriFormatException: Invalid URI: The format of the URI could not be determined.
   at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
   at System.Uri..ctor(String uriString)
   at ExpenseCalc_SilverLight.MainPage.MainPage_Loaded(Object sender, RoutedEventArgs args)
   at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
   at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

1 Ответ

1 голос
/ 09 октября 2010

строка uri, указанная вами для конструктора Uri, недопустима, она должна выглядеть следующим образом:

new Uri("http://localhost:88/expenseservice.svc/expenses")

Но я совершенно уверена, что она не будет работать ни на фабрике Azure: вы не можете использовать жесткий кодИнформация о порте на нем, как они могут измениться.Хм Кроме того, я уверен, что это не будет работать на фабрике, так как приложение SL работает на клиенте и хорошо .. localhost на клиенте - это клиент, а не сервер

, который вы должны использовать относительный или абсолютныйURI без указания хоста.

new Uri("/expenseservice.svc/expenses",UriKind.Relative)

должен сделать трюк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...