2016-08-04 12 views
0

おはようございます。WebServiceURLをXamarin.Formsプロジェクトに接続する方法は?

自分のモバイルアプリケーションを自分のVS2015にあるSQLデータベースに接続し、自分の携帯電話に表示する必要がある顧客リストを返信したいと思います。

私のソリューションでは、Webサービスとデータベースを処理するXamarin PortableプロジェクトとWebFormsプロジェクトを作成しました。

WebFormsプロジェクトでは、LINQ式を使用してデータベースからデータを取得できました。私はWEB APIを使ってこれをチェックしても、本当にデータを取得できました。下の画像のように:私は何をしたいか

enter image description here

はRestClientを使用して、私のXamarinポータブルプロジェクトにこのデータにアクセスすることです。 WebFormsプロジェクトのWebServiceUrlを使用して、そのデータを取得しました。しかし、ブレークポイントを使用してデータを取得したかどうかをテストするたびに、は値を返しません。

意味私は本当に顧客のリストを表示することはできません。

これの背後にある理由は何だと思いますか?

は、ここに私のコードの一部です:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Description; 
using WebFormsDemo; 
using WebFormsDemo.ViewModel; 

namespace WebFormsDemo.Controllers 
{ 
    public class CustomerController : ApiController 
     { 
    private EBMSEntities db = new EBMSEntities(); 

    // GET: api/Customer 
    public IQueryable<CustomerViewModel> GetCustomerViewModels() 

    { 
     var displaycustomerInfo = from cust in db.CUSTOMERs 
            select new CustomerViewModel 
            { 
             Id = cust.CUSTOMER_ID, 
             CUSTOMER_CODE = cust.CUSTOMER_CODE, 
             CUSTOMER_NAME = cust.CUSTOMER_NAME, 
             CUSTOMER_MOBILE_NUMBER = cust.CUSTOMER_MOBILE_NUMBER, 
             CUSTOMER_EMAIL_ADDRESS = cust.CUSTOMER_EMAIL_ADDRESS, 
             CUSTOMER_CONTACT = cust.CUSTOMER_EMAIL_ADDRESS + "," + " " + cust.CUSTOMER_MOBILE_NUMBER 
            }; 




     return displaycustomerInfo; 
     } 

    } 
} 

2)XamarinForms

CustomerController.cs

1)Webフォーム

RestClient.cs

public class RestClient_Customer <T> 
{ 


    private const string WebServiceUrl = "http://localhost:50857/api/Customer/"; 

    public async Task<List<T>> GetCustomerAsync() 
    { 
     var httpClient = new HttpClient(); 

     var json = await httpClient.GetStringAsync(WebServiceUrl); 

     var taskModels = JsonConvert.DeserializeObject<List<T>>(json); 

     return taskModels; 
    } 
    } 

CustomerServices.cs

using Plugin.RestClient; 
using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Net.Http; 
using System.Text; 
using System.Threading.Tasks; 
using XamarinFormsDemo.Models; 

namespace XamarinFormsDemo.Services 
{ 
    public class CustomerServices 
    { 

    public async Task<List<Customer>> GetCustomerAsync() 
    { 
     RestClient_Customer<Customer> restClient = new RestClient_Customer<Customer>(); 

     var customerList = await restClient.GetCustomerAsync(); //yung getasync ay pantawag as restclient 

     return customerList; 
     } 
    } 
} 

CustomerVM.cs

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Diagnostics; 
using System.Linq; 
using System.Net.Http; 
using System.Runtime.CompilerServices; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Input; 
using Xamarin.Forms; 
using XamarinFormsDemo.Models; 
using XamarinFormsDemo.Services; 
using XamarinFormsDemo.Views; 

namespace XamarinFormsDemo.ViewModels 
{ 
public class CustomerVM : INotifyPropertyChanged 
{ 


    private List<Customer> _customerList; // keep all customers 
    private List<Customer> _searchedCustomerList; // keep a copy for searching 
    private Customer _selectedCustomer = new Customer(); 

    private string _keyword = ""; 
    public string Keyword 
    { 
     get 
     { 
      return _keyword; 
     } 
     set 
     { 
      this._keyword = value; 

      // while keyword changed we filter Employees 
      //Filter(); 
     } 
    } 



    private void Filter() 
    { 
     if (string.IsNullOrWhiteSpace(_keyword)) 
     { 
      CustomerList = _searchedCustomerList; 

     } 
     else 
     { 
      // var lowerKeyword = _keyword.ToLower(); 
      CustomerList = _searchedCustomerList.Where(r => r.CUSTOMER_NAME.ToLower().Contains(_keyword.ToLower())).ToList(); 
      // EmployeesList = _searchedEmployeesList.Where(r => r.EMPLOYEE_NAME.Contains(_keyword)).ToList(); 


     } 
    } 




    public List<Customer> CustomerList 
    { 
     get 
     { 
      return _customerList; 
     } 
     set 
     { 
      _customerList = value; 
      OnPropertyChanged(); 
     } 
    } 


    public CustomerVM() 
    { 
     InitializeDataAsync(); 

    } 

    private async Task InitializeDataAsync() 
    { 
     var customerServices = new CustomerServices(); 
     _searchedCustomerList = await customerServices.GetCustomerAsync(); 
     CustomerList = await customerServices.GetCustomerAsync(); 

    } 




    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    } 
} 

注:私はそれを正しいことをやってかないでよか私のRestClientに近い見てみてください。どうもありがとう。

+0

を参照してください。私はあなたの携帯電話やエミュレータがローカルホストアドレスを見つけることができないと推測しています。 – batmaci

+0

@batmaciしかし、私は2台の電話機でそれを試しました。それでも私は同じことを得る。私のコードは正しいですか? –

答えて

1

私はそれがエミュレータや電話で問題だと思っていません。あなたはあなたのアンドロイドデバイス上でlocalhostに接続することはできません。ルーターがワイヤレスに接続されている場合は、ルーターが提供する外部IPアドレスを使用する必要があります。それはローカルホストに問題がある可能性があり、これらの2つのトピック

How can I access my localhost from my Android device?

How to connect to my http://localhost web server from Android Emulator in Eclipse

+0

私はWebService経由でSirに接続していますか? WebフォームプロジェクトのWebServiceURLを "http:// localhost:50857/api/Customer /"のように取得します。 RestClientでアクセスします。それを行うには何かを変更する必要がありますか? –

+0

@JayceeEvangelistaあなたのWebサービスは、あなたのローカルPCの外に到達可能である必要があります。あなたのWebサービスを別のコンピュータから接続できますか?そうでなければ、それはAndroidデバイスが接続できないのと同じものです。 – batmaci

+0

別のPCからWebServiceにアクセスできるかどうかはどのようにわかりますか?私はこれにアクセスするべきですか? http:// localhost:50857/api/Customer/ –

関連する問題