Asp.NET’de web servis hazırlama ve Android de kullanimi :MobileCoder I MobileCoder.NET I Mobil Programlama I Android Programlama I Mobil Geliştiricilerin Buluşma Noktası I www.MobileCoder.Net

Asp.NET’de web servis hazırlama ve Android de kullanimi

03.04.2015 tarihinde Android Programlama kategorisine eklenmiş, 5.411 views Kişi Okumuş ve 0 Yorum Yapılmış.

 

Web Servis Nedir ?

Web üzerinden HTTP protokolü ile hizmet veren program parçalarıdır. Platform bağımsızdır ve oluşturulan verilerin bütün cihazlara gönderilebilmesini sağlayan bir servistir.

Örneğin; web servisler ile web uygulamamızdan android uygulamamıza, android uygulamamızdan web uygulamamıza veri gönderebiliriz.

Bu yazıda sizlere web uygulamasında hazırlanmış bir web servisin android uygulamasından çağırılıp kullanılmasını anlatacağız.

Ama web servislerle ilgili konuyu daha iyi anlayabilmeniz için biraz daha teorik bilgilere devam edelim. . .

Web servisler platform bağımsız demiştik, web servisler veri transferini de platform bağımsız veri taşıyabilen işaretleme dili olan XML ile yapılır. Bu XML çıktılarını kısaca SOAP(Simple Object Access Protocol) olarak adlandırılan protokol üretir.

Bu web servisi kullanacak olan program parçasının hangi programlama dili ile yazıldığının bir önemi yoktur. .NET teknolojisi tarafından yazılmış bir web servis Java tarafında da rahatlıkla kullanılabilir.

Çünkü girdiler ve çıktılar XML biçiminde olacaktır. Biz uygulamamızda Web servisimizi .NET platformunu kullanarak hazırladık ve java dili ile yazılmış mobil uygulamamızda kullandık.

Mobil uygulamamız web servisi çağırma esnasında bir “client” gibi davranır. Web servisi de bu esnada bir “server” olarak davranır . Ve clientten gelen isteklere cevap gönderir. Bu işlemi bir de aşağıda ki şekilde inceleyelim ;

soap1

 

 

  1. Client tarafından gönderilen bilgiler SOAP ile XML çıktılarına dönüştürülür(SERİALİZE)
  2. Daha sonra bu XML çıktılar server tarafından işlenir.(DESERİALİZE) Ve server, client tarafından gönderilen bilgileri ayırır.
  3. Server, Cliente bir cevap gönderir. SOAP bu cevabı XML verilerine dönüştürür.(SERİALİZE)
  4. Serverın yanıtı Cliente gelir. Client de Serverdan gelen cevabı DESERİALİZE ederek kendi anlayacağı bir yanıta çevirir.

 

Teorik bilgileri verdiğimize göre artık uygulamamıza geçebiliriz . .

 

İlk olarak

File -> New -> Project -> “ ASP.NET Web Application “ seçeneğini seçiyoruz ve uygulamamıza bir isim veriyoruz :

soap2

 

Uygulama üzerinde sağ tıklayarak Add -> New Item -> seçeneklerinden “ Web Service ” seçiyoruz.

soap3

 

Web Servis yazacağımız asmx uzantılı sayfamız açılıyor. Sayfamızda uygulama tarafından hazırlanmış bir metod bulunuyor. (HelloWorld)

soap4

 

namespace Secmen2WebService
{
	/// <sumary>
	/// Sumary description for WebService1
	/// </sumary>
	[WebService(Namespace = "http://yasemincirt.com/")]
	[WebServiceBinding(ConformsTo = WSiProfies.BasicProfile_1)]
	[System.ComponentModel.ToolboxItem(false)]
	// To allow this web service to be called from script, using ASP.NET AJAX, uncomment the following line.
	// [System.Web.Script.Services.ScriptService]
	
	public class WebService1: System.Web.Services.WebService
	{
		[WebMethod]
		public string HelloWorld()
		{
			return "Hello World;"
		}
		
		[WebMethod]
		public int topla(int s1, int s2)
		{
			return s1+s2;
		}
	}
}

Biz bu uygulamamızda “topla” isminde bir metod yazıyoruz. Bu metodla kullanıcıdan alınacak 2 değer toplatılıyor ve kullanıcıya sonuç döndürülüyor.

Önemli bir nokta da yazdığımız metodların başına “ [WebMethod] ” ekleyeceğiz. Böylece yazılan metodlar global olacak. Ve dışarıdan erişime açık olacak.

soap5

 

 

Uygulamamızı çalıştırdığımızda iki metod karşımıza geliyor. “topla” isimli metodumuza tıklıyoruz.

soap6

Metodu tıkladığımızda SOAP tarafından oluşturulan XML içeriği yer alıyor. Bu içerikte metodun İnput ve Outputları yer alıyor.

Metod ; int türünde bir “s1” parametre ve int türünde bir “s2” parametresi alıyor. Ve sonuç olarak geriye yine int türünde bir değer döndürüyor.

Artık metodumuza değerlerimizi göndererek , kontrol edebiliriz . .

soap7

Sonuç;

soap8

Metodumuza “5” ve “5” değerlerini gönderdiğimizde bize “10” sonucunu veriyor. Ve metodumuzu test etmiş bulunuyoruz.

Web Servis işlemlerimizi tamamladığımıza göre artık sıra mobil uygulamamızda metodu kullanmaya geldi.

Uygulamamızda Android üzerinden web servislere erişebilmek için öncelikli olarak şu iki adımı gerçekleştirmemiz gerekiyor;

  1. AndroidManifest.xml dosyasında internet erişim izini vermek.
  2. Web servise bağlanabilmek için bir kütüphane entegre etmek. ( örn: KSoap2)

AndroidManifet.xml

Uygulamamız içerisinden internete erişim sağlaya bilmek için AndroidManifest.xml dosyasında değişiklik yapmamız gerekiyor. Aksi takdirde android işletim sistemi bizim uygulamamızın internete bağlanmamıza izin vermeyecektir.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 

Bu satırı manifest taglerinin içine yazarak internet erişim izini için talepte bulunduk.

KSoap2 Kütüphanesi Kurulumu

Web servise erişim sağlamak için Ksoap2 kütüphanesini kullanmayı tercih ediyorum. KSoap2 kütüphanesine erişmek için tıklayınız.  Şimdi Android Studio programını başlatalım. Ardından yeni bir android projesi oluşturarak yavaş yavaş kodlamaya başlayalım.

Android Studio Proje Oluşturma 1.AdımAndroid Studio Proje Oluşturma 2.AdımAndroid Studio Proje Oluşturma 3.AdımAndroid Studio Proje Oluşturma 4.AdımYukarıda belirtilen resimlerdeki adımları  gerçekleştirerek Android Studio programını kullanarak yeni bir proje oluşturduk.

Sırada KSoap2 kütüphanesini projemizin içine entegre etmemiz lazım.Gerekli adımları aşağıdaki resimlerden görebilirsiniz.

Projeye KSoap2 Ekleme 1.Adım Projeye KSoap2 Ekleme 2.AdımProjeye KSoap2 Ekleme  3.Adım

OK butonuna tıklayıp ardından Finish butonuna basalım. Bu adımları tamamladıktan sonra Android Studionun Build etmesi için biraz beklmemiz gerekecektir. Build işlemi bittikten sonra kütüphanemizi kullanmamız için ufak bir kaç adım kaldı. Bu adımda Dependencies ayarlarınılarını yapmamız gerekiyor. Bunun için project penceremizde bulunan app klasörüne sağ tıklayarak Open Module Settings’e tıklıyoruz.KSoap2Import4

Ardından açılan pencereden Dependencies sekmesine geliyoruz.Sağ tarafta bulunan artı butonuna tıklayarak açılan sekmeden Module Dependecy’e tıklıyoruz.

KSoap2Import5

Açılan penceden sonra eklediğimiz KSoap2 kütüphanesini seçerek işlemlerimizi gerçekleştiriyoruz.Ardından tekrar Android Studio’nun Build etmesi için biraz zaman veriyoruz. Bazen Android Studio kendisini tekrar başlatmak için izin isteyebiliyor. Yeniden başlamasına izin veriniz.

Şuana kadar AndroidManifest dosyamızda internet erişimi ve webservisle iletişime geçmek için KSoap2 ayarlarını yaptık.

Kodlamaya geçmeden önce program içinde kullanacağımız AsyncTask sınıfından bahsedelim.

AsyncTask Nedir?

Çok kısa bir şekilde tanımlamak gerekirse ana akışı etkilememek için arka planda yapmak istediğimiz işlemleri yapmamıza olanak sağlayan bir sınıftır. AsyncTask sınıfından türetilir.Örnek olarak internet üzerinden bir veri çekme işlemi yapılırken veya veritabanı işlemleri yapılırken mainthread üzerinde yapıldığında, işlemin uzun sürmesi sonucunda kullanıcı uygulamamızın donduğunu düşünerek uygulamamızda çıkmasını sağlayacaktır. Bunun yerine ana akış üzerinde zaman alacak işlemleri gerçekleştirmememiz bizim için daha avantajlı olacaktır.

AsyncTask ile ilgili kısa bir bilgi edindikten sonra sıra kod yazmaya başlayabiliriz:

1.String.xml

Uygulamamızın arayüzünde gösterilecek olan değerlerin tanımlaması için kullanıyoruz.

2.MainActivity.xml

Uygulamamızın arayüzünü oluşturuyoruz. Kullanıcılarımızın veri girişini ve girilen verilerin çıktısını almak için gerekli tanımlamalarımızı yapıyoruz.

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center_vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/birinci_sayi"
        android:id="@+id/txt_v_BirinciSayi" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/txt_BirinciSayi" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/ikinci_sayi"
        android:id="@+id/txt_v_IkinciSayi" />

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/txt_IkinciSayi" />

    <Button
        android:layout_height="wrap_content"
        android:text="@string/topla"
        android:id="@+id/btn_topla"
        android:layout_width="wrap_content" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text=""
        android:id="@+id/txt_v_sonuc" />

</LinearLayout>

Yukarıdaki kodların ekran çıktısı aşağıdaki gibi olacaktır.

Coding1

Mainactivity java dosyasında asıl işlemlerimizin yapılacağı alandır. Kullanıcının sayısal değerler girdikten sonra Topla butonuna basarak kullanıcı arayüzünde işleminiz devam ediyor şeklinde bir dialog göstererek arka planda web servise bağlanarak gerekli değerleri göndereceğiz. Web servisimizin geri döndürdüğü sonucu alarak ekranda göstereceğiz.

 


/*
*  Date     :   04.2015
*  Author   :   Emre TOPAL  --  http://www.emretopal.kim
*  Author   :   Yasemin CIRT    -- http://www.yasemincirt.com
*
* */
public class MainActivity extends ActionBarActivity {

    ProgressDialog pDialog;
   // Web Servisimizdeki Namspace alanı
    private final String _Namspace      =   "http://yasemincirt.com/";
    // Web Servimizdeki Method ismi
    private final String _MethodName    =   "topla";
    // Namspace ile Method isminin birleşimi
    private final String _Action        =   "http://yasemincirt.com/topla";
    // Web Servisimizin Adresi
    private final String _Url           =   "http://crt.yasemincirt.com/WebService1.asmx/";
    private String _ResultValue         =   "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Topla butonumuzu tanımlıyoruz.
        Button _btn_topla =(Button)findViewById(R.id.btn_topla);

        // Yukarıda tanımladığımız _btn_topla butonuna tıklama olayını tanımlıyoruz.

        _btn_topla.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Hazırladığımız AsyncTask'ımızı çalıştırıyoruz..
                new _WebServiceAsyncTask().execute();
            }
        });
    }

    // Arkaplanda webservis işlemlerimizi yaptığımız yer.
    // AsyncTask sınıfımızdan _WebServiceAsyncTask türetiyoruz..
    public class _WebServiceAsyncTask extends AsyncTask<Void,Void,Void> {
        // Arkaplan işlemi başlamadan önce çalışacak olan fonksiyonumuz.
        protected void onPreExecute() {
            // Burada kullanıcımıza Yükkleniyor mesajını göstermek için bir ProgressDialog olşturuyoruz.
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Yükleniyor...");
            pDialog.setIndeterminate(true);
            pDialog.setCancelable(false); // ProgressDialog u iptal edilemez hale getirdik.
            pDialog.show(); // ProgressDialog u gösteriyoruz.
        }
        protected Void doInBackground(Void... voids) {

            // EditText'e girilen değerleri alabilmek için nesnelerimizi tanımlıyoruz.
            EditText _birinci_sayi = (EditText)findViewById(R.id.txt_BirinciSayi);
            EditText _ikinci_sayi  = (EditText)findViewById(R.id.txt_IkinciSayi);

            SoapObject request = new SoapObject(_Namspace, _MethodName);
            // Web Servisimize gönderilcek parametreleri ekliyoruz.
            request.addProperty("s1", _birinci_sayi.toString());
            request.addProperty("s2",_birinci_sayi.toString());

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
            // WebServisimiz ASP.NET ile hazırlandığı için mutlaka TRUE değerini vermeliyiz.
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);

            AndroidHttpTransport aht = new AndroidHttpTransport(_Url);
            aht.debug=true;

            try {

                aht.call(_Action,envelope);
                SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
                // Web servisimizden geri gelen sonucu değişkenimize aktarıyoruz.
                _ResultValue=response.toString();
            }catch (Exception e){

                _ResultValue=e.toString();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            pDialog.dismiss();  //ProgresDialog u kapatıyoruz
            // Sonucu yazdıracağımız TextView'ı tanımlıyoruz ve değerini veriyoruz.
            TextView txt_v_sonuc =(TextView)findViewById(R.id.txt_v_sonuc);
            txt_v_sonuc.setText(_ResultValue.toString());
        }
    }

}

 

Vakit ayırıp yazımızı okuduğunuz için teşekkür ederiz.

Emre TOPAL

Yasemin CIRT

Yazar Hakkında

Yazar : ceren kozhan

Yazar Hakkında :

Yazarın Tüm Yazıları İçin Tıklayınız

Yorumlar

Sitemizde En Çok Okunan İçerikler

ANDROİD TELEFONLARA ROOT ATMA
ANDROİD TELEFONLARA ROOT ATMARoot Ne demek ? Bir android cihazı root etmek telefonun
fragment
ANDROİD FRAGMENT YAPISI VE KULLANIMIFragmentler Activity içerisinde yer alan kullanıcı ara yüzleridir. Fragment
Asp.NET’de web servis hazırlama ve Android de kullanimi  Web Servis Nedir ? Web üzerinden HTTP protokolü ile hizmet
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞME
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞMEANDROİD TELEFONLARDA KONFERANS GÖRÜŞME   Konferans görüşme çok fazla bilinmeyen androidin

Sitemizde En Çok Yorumlanan İçerikler

Rating Bar Kullanımı
Rating Bar KullanımıAndroid’de yıldız şeklinde derecelendirme çubuğu olarak kullanılır. Kullanıcı sürükleme
Android Wear Emülatör Kurulumu
Android Wear Emülatör Kurulumu   Android studio da geliştireceğimiz uygulamaların kontrolunü yapmak için emülatör
Resim Galerisi Oluşturma
Resim Galerisi OluşturmaAndroid Programlama – Resim Galerisi Oluşturma Bu yazıda, bir galeri
SQLite Database Browser Kullanımı
SQLite Database Browser KullanımıSQLite Database Browser Kullanımı Merhaba arkadaşlar, Android uygulamaları geliştirirken uygulama üzerindeki

Son Yapılan Yorumlar

  • Kategoriler

  • Son Yazılar

  • Takvim

    Ekim 2017
    P S Ç P C C P
    « Kas    
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
  • Etiketler

  • Son Yorumlar

    • Arşivler

    • Meta