Android ile .NET Web Servis Arasında Bağlantı Kurma

Android ile .NET Web Servis arasında bağlantı kurmak oldukça problemli bir iş.Bu aşamada gerçekten çok uğraştığımı ve bunaldığım anlar olmuştur.Ancak bir şekilde bağlantıyı kurmayı başardım.Bağlantıyı kurmak için öncelikle bunun için hazırlanmış ksoap library i android uygulamasına dahil etmek gerekir.Bunun sebebi Web Servisler SOAP protokolü üzerinden haberleşir.Haberleşmenin sağlanabilmesi için android tarafından ksoap kütüphanesini kullanmak gerekiyor.Ksoap library i indirmek için ilgili tarayıcılarda aratıp bulmak mümkündür..jar uzantılı dosyayı uygulamaya dahil ettikten sonra bağlantı için gerekli kodları yazmaya başlayalım.


public static final String NAMESPACE="http://tempuri.org/";     
public static final String SOAP_ACTION="http://tempuri.org/IsAuthenticated";
public static final String URL="http://localhost/HealthyNutrition/UserBusiness.asmx";
public static final String METHOD_NAME="IsAuthenticated";


Öncelikle SOAP protokolü üzerinden haberleşeceğimiz değişkenleri tanımlamamız gerekiyor.

Şekil 1 -URL
URL kısmına şekildeki yeri kopyalıyoruz.Fakat burada localhost yazan kısma bilgisayarın ip adresini yazmamız gerekiyor.Zira yazmassak program çalışmayacaktır.Ip adresini isteminden ipconfig yazarak bulabiliriz.

Şekil 2 -SOAP ACTION
Soap Action kısmı şekilde görüldüğü gibidir.Diğer değişkenlerden Namespace kısmı zaten Visual Studio tarafında oluşturduğumuz web servis uygulamasını açarsak orada class ın tanımlandığı yerin üstünde yazmaktadır.Method Name adından da anlaşılacağı gibi Web Servis deki hangi methodun çalıştırılacağını belirler.
Android SOAP protokolü ile haberleşmeyi ana thread içerisinde yapılmasına izin vermiyor.Dolayısıyla haberleşmeyi yapmak için thread kullanımı gerekiyor.Bu aşamada dağıtık sistemler dersinde yaptığımız uygulamalardaki bilgilerimi kullandım.



Thread nt=new Thread(){ //Android ana thread üzerinden web servise bağlanmaya izin vermiyor.
         // o yüzden yeni thread tanımlayıp onun üzerinden bağşantı işlemleri yapılır.


    public void run(){ //Thread ile ilgili işlemler run fonksiyonunu override ederek yapılır
     
    SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME); //Namespace ve method ismi ile ilgili web servise bağlantıyı sağlar 
    request.addProperty("email",email.getText().toString()); //web serviste calısan fonksiyona gönderilecek parametreler belirlenir.Parametrelerin isimleri web serviste çalışan fonksiyonların aldığı parametrelerle aynı olmak zorunda
    request.addProperty("password",password.getText().toString());
    
    SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet=true; //
    
    envelope.setOutputSoapObject(request);
    
    HttpTransportSE transport=new HttpTransportSE(URL);
    try {
     transport.call(SOAP_ACTION, envelope);
     SoapPrimitive result=(SoapPrimitive) envelope.getResponse(); //Web servisten cevabı alır.
     loginStatus=Boolean.parseBoolean(result.toString());  
     
     if(loginStatus)
     {
      intent= new Intent(Main.this,NewsFeed.class);
      startActivity(intent);
      control=true;
     }
     
    } catch (HttpResponseException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (XmlPullParserException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
    
    runOnUiThread(new Runnable() { //Thread ile işlem yapıldığı için ekrana yazı yazdırmak için kullanılır.
     
     @Override
     public void run() {
      // TODO Auto-generated method stub
      if(control == false)
      Toast.makeText(Main.this, "Sistemde böyle bir kayıt bulunamadı.Lütfen aşağıdaki linke tıklayarak üye olunuz", Toast.LENGTH_LONG).show();

     }
    });
    
    
    }
   };
    
   nt.start(); 

Web Servis üzerinde çalışan IsAuthenticated fonksiyonu ile veri alışverişi yapılması bu şekilde yapılmaktadır.

Hiç yorum yok:

Yorum Gönder