2015-03-14 4 views
0

Я работаю над созданием приложения WindowsPhone 8.1, и у меня возникают проблемы с получением клиентом доступа к базе данных. Я создал серверный проект, который отлично работает с помощью web api. Я могу запустить отладчик и добавить «/ api/entityName», чтобы вернуть список всех строк в этой таблице или только одну строку, если я укажу значение id. После много тестирования на стороне клиента, я думаю, что я определил свою ошибку: значение uri. Может ли кто-нибудь сказать мне, какое значение мне нужно передать в конструктор uri? Вот метод, который я использую в клиенте:C# HttpClient Значение Uri

public async void GetBars() 
    { 
     var uri = new Uri("http://localhost:20672/tables/bars"); //seems like this value is the problem 
     var httpClient = new HttpClient(); 

     barsListBox.Items.Add("right before try starts"); 
     // Always catch network exceptions for async methods 
     try 
     { 
      barsListBox.Items.Add("try started"); 
      var result = await httpClient.GetStringAsync(uri); //never gets past this line. goes straight to finally 
      barsListBox.Items.Add("right before linq"); 
      var queryAllBars = 
       from bar in result 
       select bar; 
      barsListBox.Items.Add("linq finished"); 
      foreach (var bar in queryAllBars) 
      { 
       barsListBox.Items.Add(bar); 
      } 
     } 
     catch 
     { 
      // Details in ex.Message and ex.HResult.  
     } 
     finally 
     { 
      barsListBox.Items.Add("finally executed"); 
      httpClient.Dispose(); 
     } 


    } 

База данных представляет собой базу данных SQL Server приютили на Azure. Я попытался использовать URL-адрес, указанный для базы данных в Azure, мой текущий IP-адрес, почти каждую комбинацию использования/исключая номер порта и т. Д., Но ничего не работает. Я не получаю никаких ошибок, но я также не получаю ничего отображаемого в пользовательском интерфейсе (за исключением заявлений тестирования, которые я ввел). Попробуйте начать печатать, но прямо перед linq нет, поэтому я считаю, что моя проблема исходит из значения uri, передаваемого int GetStringAsync. Спасибо за помощь.

+0

Результатом является 'HttpResponseMessage', вы не можете использовать LINQ с этим видом объекта. Попробуйте проверить значение 'response.Content.ReadAsStringAsync();' – kiewic

ответ

0

Благодаря @ ответ Midhun и другие ответы, которые я получил, я был в состоянии получить бруски, чтобы правильно напечатать. Я использовал код Midhun выше с uri моей размещенной базы данных (urz azurewebsites.net) вместо моей базы данных localhost. Я также изменил IList в строку и написал метод, который выбирает значения с помощью IndexOf и подстрок следующим образом:

start = bar.IndexOf("BarID", start) + 7; 
int end = bar.IndexOf(",", start); 
int id = Convert.ToInt32(bar.Substring(start, (end - start))); 
Bars newBar = new Bars(id, name, street, city, state, phone, zip); 
Bars.barsList.Add(newBar); 

Затем я создал статический список в моей модели Bars добавить вновь созданные Бары элементов в.

0

Вы можете попробовать, как этого

   using (var client = new HttpClient()) 
       { 

        client.BaseAddress = new Uri("http://Ipaddress/mammo/"); 
        client.DefaultRequestHeaders.Accept.Clear(); 
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

        HttpResponseMessage response = await client.GetAsync("api/controllername"); 

         if (response.IsSuccessStatusCode) 
         { 
          IList<something> data = await response.Content.ReadAsAsync<IList<something>>(); 
         } 
       } 
+0

Спасибо за ответ. Я опубликовал проект своих сервисов для Azure и заменил значение uri на urz azurewebsites.net, и теперь я, по крайней мере, способен перебирать весь свой метод (все тестовые комментарии ударяются). Тем не менее, я все еще не получаю никаких значений для печати. Используя приведенный выше код, я добавил следующий цикл foreach для печати данных в свой пользовательский интерфейс, но он никогда не входит в цикл. Есть ли другой способ, который я должен использовать для печати значений в моем пользовательском интерфейсе? Благодарю. – jeffkempf

+0

foreach (var bar in data) { barsListBox.Items.Add ("foreach included"); barsListBox.Items.Add (bar); } – jeffkempf