Soru & Cevap

WP8 Web Servis Kullanımı

30.09.2013 - 10:52

bu kodlarla direk debug edince xml olarak verileri getiriyor

[WebMethod]
public DataTable GetAllOtels()
{
string BaglantiCümlesi = ("Server=********;Database=**********;User=********;Password=*******;");
MySqlConnection Baglanti = new MySqlConnection(BaglantiCümlesi);
MySqlCommand Komut = Baglanti.CreateCommand();
MySqlDataReader Dr;
Komut.CommandText = "SELECT musteri_adi FROM musteriler";
Baglanti.Open();
Dr = Komut.ExecuteReader();
DataTable Dt = new DataTable();
Dt.Load(Dr);
Baglanti.Close();
return Dt;
}

bu debug edince çalışıyor bunu windows phone da gösterirkende şu şekilde yapıyorum


public MainPage()
{
InitializeComponent();

MusteriGetir.OtelCekSoapClient MusteriService = new MusteriGetir.OtelCekSoapClient();
MusteriService.GetAllOtelsCompleted += new EventHandler<MusteriGetir.GetAllOtelsCompletedEventArgs>(MusteriService_GetAllOtelsCompleted);
MusteriService.GetAllOtelsAsync();
}
void MusteriService_GetAllOtelsCompleted(object sender, MusteriGetir.GetAllOtelsCompletedEventArgs e)
{


//listBox1.ItemsSource = e.Result;//bu kodu yazında Cannot implicity convert type diye bir hata veriyor 
//burda ne yanlış ? 
listBox1.ItemsSource = e.Result.ToString(); //buda çalışmıyor ekran boş geliyor break a atıyo program

20 Görüntülenme

6 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-472-1375079047.jpg
mehmet.altiparmak
02.10.2013 - 10:34

Merhaba Serdar,

Öncelikle belirttiğin ConnectionString formatı MySql Connector 6 ve sonraki sürümlerde artık desteklenmiyormuş, o yüzden daha düşük bir mysql connector versiyonunu kullanman ya da mysql sunucunda bir kaç konfigürasyon değişikliği yapman gerekiyor. Ben MySql Connector 5.2.7 versiyonu ile aşağıdaki kodu çalıştırabildim, işine yarar umarım kolay gelsin. 

 

  public List<Customer> GetAllCustomers()
        {
            const string connectionString = ("Server=*********;Database=*************;User=*******;Password=**********;");
            var connection = new MySqlConnection(connectionString);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "SELECT musteri_adi FROM musteriler";
            connection.Open();
            MySqlDataReader dr = command.ExecuteReader();
            var dt = new DataTable();
            dt.Load(dr);
            connection.Close();

            var customers = new List<Customer>();
            foreach (DataRow row in dt.Rows)
            {
                customers.Add(new Customer() { Name = row[0] == null ? String.Empty : row[0].ToString() } );
            }

            return customers;
        }

 

    [DataContract]
    public class Customer
    {
        [DataMember]
        public string Name { get; set; }

    }

 

[ServiceContract]
    public interface IService1
    {

        
        [OperationContract]
        [WebInvoke(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetAllCustomers", RequestFormat = WebMessageFormat.Json, Method = "GET" )]
        List<Customer> GetAllCustomers();

    }

Not: Tüm kodu tek bir yerde görebilmen amacıyla kodunu çok değiştirmedim ancak bağlantı yönetimi, connection pool araştırabilirsin, exception handlingi gözden geçirmelisin.   

Profile picture for user efkanozkan41
efkanozkan41
01.10.2013 - 11:06

evet sevis host üzerinde .asmx olarak zaten 2 gün önce kitao siparişi verdim onları inceleyip bu gece çalışmalar yapıcam duruma göre buraya bildiricem düzelir düzelmez bilmiyorum büyük ihtimalle veriyi datatable olarak return ettiğimden dolayı listelemiyor result ta hata veriyor e.result yazınca data table falan yazıyor list alarak ordan alırsam düzelir sanırım ki onuda yapamadımbir türlü

picture-472-1375079047.jpg
mehmet.altiparmak
01.10.2013 - 09:13

Evet İbrahim doğru söylüyor, emulator network üzerinde çalıştığı işletim sisteminden bağımsız bir cihazmış gibi görünüyor o yüzden localhost ile erişmeye çalıştığınızda bilgisayar üzerindeki bir uygulama erişemiyorsunuz. Bir kaç konfigürasyon değişikliği ve ip ile erişim gerekiyor. Local bir WCF servisine Windows Phone emulatoründen nasıl bağlanılacağı ingilizce olarak burada anlatılmış.

Serdar ile daha önce de iletişme geçmiştik, servisi host üzerinde çalıştırıyordu.  

picture-2361-1379626676.jpg
iersoy
01.10.2013 - 08:02

Servis nerede çalışıyor?

Windows Phone Emulatörünün 8.0 versiyonuyla localhost'a erişimi engellendi.Eğer servisin local'de çalışıyorsa hata almanın sebebi bu.

Profile picture for user efkanozkan41
efkanozkan41
01.10.2013 - 12:56

web servisten datatable olarak geliyor veri onu okutamıyorum bir türlü 
listBox1.ItemsSource = e.Result.Rows;  
listBox1.ItemsSource = ((DataTable)e.Result).Rows;

bunları denedim olmadı ama List<example> oluşturamıyorum web serviste hata veriyo o tip te alamıyorum

picture-472-1375079047.jpg
mehmet.altiparmak
01.10.2013 - 09:14

Merhaba Serdar, 

Çalışmıyor derken aldığın hata nedir onu yazabilirsen problemi daha iyi anlayabiliriz. Sorularınızı yazarken aldığınız hatayı geçtiğiniz adımları belirtmeye özen gösterin lütfen. 

listBox1.ItemsSource IEnumerable tipinde bir özellik, tahminim senin Result'ın aynı tipte değil. Kontrol edebilir misin Result property'sinin tipi nedir?