Я создаю приложение 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)