16 Haziran 2016 Perşembe

Change sprite with script | Sprite yi script ile değiştirme Unity3d

Merhaba arkadaşlar, unityde oluşturduğumuz nesnelerin kod ile görünümlerini bazen değiştirmek isteriz. Sprite olarak oluşturduğumuz görünüm dosyalarında bu değişiklikleri kod ile nasıl değiştiririz işte burada yazacağımız kod bize bu değişikliği sağlayacaktır.

Örneğin; ilerleyen bir nesnemizin zıplarken farklı bir görünüme sahip olmasını isteriz.

public Sprite changeObject;
public GameObject object = new GameObject();
 

void Start()
{
    object.gameObject.GetComponent<SpriteRenderer>().sprite = changeObject;

}

bu satırda gerçekleştirdiğimiz atama işlemi ile, nesnemizin sahip olduğu görünümü başka bir görünüm ile değiştirmekteyiz.


14 Haziran 2016 Salı

use properties for gameObject | Nesnenin özelliklerini kullanma, Unity3d

Merhaba arkadaşlar, unity3d projesinde oluşturduğumuz script dosyamızda, projemizdeki bir nesneni hareket etmesi ya da nesneyi renklendirme gibi farklı şekiller uygulamak isteriz. Script dosyamızı oluşturduktan sonra bu dosya ile nesneyi bir şekilde bağdaştırmamız gerekecektir. Bu bağdaştırma özelliği için öğrendiğim iki metodu sizinle paylaşacağım.
Script dosyasını oluşturduktan sonra AddComponent ile öncelikle nesnemin kontrolörüne(inspector) ekliyorum.
Add Componente tıkladıktan sonra Component menüsünden Scripts i seçiyorum. Burada görünen İsimler daha önceden oluşturmuş olduğum Script dosyalarımın isimleridir. Nesneme eklemek istediğim Script dosyasının ismini bu menüden bularak tıklıyorum ve kontrolörüme(inspector) ekliyorum. Ekledikten sonra kontrolörümde(inspector) Script dosyamın eklendiğini görüyorum.


Nesnem ile Script dosyamı birleştirdikten sonra Script dosyamda nesnemin özelliklerini kullanacağım.
İlk öğrendiğim metod Script dosyamda

public GameObject cube;

değişken tanımlaması yapıyorum. Bu tanımlamadan sonra dosyamı kaydedip Unitye dönüyorum. Nesneme tıkladıktan sonra kontrolörde(inspector) Script özellikğimin eklendiği bölüme geliyorum ve burada Script dosyasında tanımlama yaptığım değişkenimin adının yazıldığını görüyorum.


Değişken adının yanında bulunan "None" değerinin üzerine, Project sekmesinde bulunan nesnemi basılı tutup bırakıyorum.


bu işlemi yaptıktan sonra, Script dosyamda cube değişkeninde yaptığım değişiklikler oyundaki nesnemin üzerindeki değişikliklere neden olacaktır.

İkinci öğrendiğim metod ise Script dosyamda

public GameObject cube = GameObject.Find("Cube");

tanımlaması ile ilk yöntemim gibi nesneme ile script dosyamdaki değişken ile müdahale edebileceğim.  Burada bulunan Find fonksiyonu içerisine verilen parametre adı Hierarchy sekmesindeki nesnemin adı ile aynı olmalıdır.

Bu tanımlamalar ile yapılan bir örnek kod paylaşmak isterim.


 bu tanımlama sayesinde cube nesnemin bulunduğu pozisyon her üst ok ile alt oka tıklamamla değişecektir.

Unity3d InvokeRepeating, Invoke ve CancelInvoke nedir ? | What is InvokeRepeating, Invoke and CancelInvoke on Unity3d ?

Yeni başladığım unityle karşılaştığım bir metodu sizinle paylaşacağım. Bu metod ile unityde süreklilik sağlayabilmekteyiz. Yani Unity3d de nesneler üzerinde sürekli işlemler yaptırmak istiyorsak zamanlayıcı gibi kullanabileceğimiz InvokeRepeating metodu bize oldukça yardımcı olmaktadır. Bu metodun kullanımı:


şeklindedir. InvokeRepeating' in ilk parametresi olan "PropFunction" string değeri, fonksiyonun ismidir. Biz fonksiyonun ismini vererek o fonksiyonu InvokeRepeating fonksiyonunda sürekli çağırmasını sağlamaktayız.
İkinci parametre olan 3 değeri ile InvokeRepeating metodunu, programın çalışmasında sonraki başlatılma süresidir. Yani program başladıktan 3 sn sonra InvokeRepeating çalışmaya başlayacak.
Son parametre olan 1 ise string olarak ismini verdiğimiz fonksiyonun kaç saniyede bir sürekli çalışması istiyorsak verdiğimiz değerdir.


Invoke metodumuz ise süreklilik ifade etmeden bir kereliğine çalıştırmak istediğimiz fonksiyonlar için kullanılmaktadır. Örneğin, Invoke metodumuz da başlangıçta belirleyeceğimiz değerleri fonksiyon çağrısı yaparak tanımlayabiliriz. Çalışacak fonksiyon için program başlamasından sonra belirli bir süre sonra çalışmasını istiyorsak bu fonksiyonun özelliğini kullanarak bunu gerçekleştirebiliriz.


İlk parametre ile fonksiyonumuzun ismini vererek çağırma işlemi gerçekleştiriliyor. İkinci parametremiz sayesinde ise fonksiyonun kaç saniye sonra çalışmasını istiyorsak o süre aralığını vererek istenilen zamanda çalışmasını istiyoruz.


CancelInvoke fonksiyonu, çalışan invoke fonksiyonunu sonlandırmak için kullanılır. Mesela InvokeRepeating fonksiyonumuz çalıştıktan sonra sürekli olarak çalışacaktır. InvokeRepeating fonksiyonun sürekliliğinin engellenmesini istediğimiz anda CancelInvoke metodunu çalıştırılarak sonlandırmış olacağız.


Görüldüğü gibi tek parametre alan CancelInvoke fonksiyonunun aldığı parametre, Daha önceden InvokeRepeating ile çalıştırdığımız fonksiyonun ismini vererek o fonksiyonun çalışmasını durdurmaktayız. CancelInvoke fonksiyonu son kez çağırılan fonksiyonun sonlanması ile sonlanacaktır. Çağırılan fonksiyon kesmeye uğramayacaktır.


11 Haziran 2016 Cumartesi

Android ile Php web servisi oluşturma - Mysql Oluşturma ve sunucuya yükleme | Create php web service use with Android - Creating Mysql and upload server

Merhaba arkadaşlar, Bu yazımızda Android ile php web servisleri projesinde veritabanımızı oluşturacağız. Veritabanımı olarak Mysql kullanacağız. Öncelikle lokalde oluşturacağımız veritabanını daha sonrasında sunucumuza yükleyeceğiz. Bir önceki yazımızda sunucumuzdan bahsetmiştik.

Buradan Yazının Videolu anlatımına geçebilirsiniz.

Şimdi gelelim Veritabanımızı oluşturmaya. Bunun için önceden yüklediğimiz XAMPP serverde apache ile MySQL' i çalıştırıyoruz.


Daha sonra tarayıcımıza http://localhost:(apache port)/phpmyadmin yazarak phpmyadminimizi açıyoruz. Apache portum 31 olarak ayarlı. O yüzden ben http://localhost:31/phpmyadmin yazarak phpmyadmine giriş yapıyorum. Kullanıcı adı ile şifrem olmadığı için direk bağlantı sağlıyorum. Eğer sizin kullanıcı adı ve şifreniz varsa lütfen bilgilerinizi girip giriş yapın. Giriş yaptıktan sonra;

Yeni veritabanı oluşturuyorum adını 'DBphp' koyuyorum.



Oluşturulan veritabanımın SQL sekmesine tıklayarak aşağıdaki kodları kopyalayıp çalıştırıyorum.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE `uyeler` (
  `UyeID` int(11) NOT NULL,
  `AdSoyad` varchar(255) NOT NULL,
  `Email` varchar(255) NOT NULL,
  `Sifre` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin5;

 
ALTER TABLE `uyeler`
  ADD PRIMARY KEY (`UyeID`);


ALTER TABLE `uyeler`
  MODIFY `UyeID` int(11) NOT NULL AUTO_INCREMENT;


 
çalıştırdığım zaman veritabanımda bir tane tablo oluşması gerekmektedir. Sonra veritabanımızın yedeğini alacağız. Bu yedeği alıp sunucumuza yükleyeceğiz.



Veritabanımıza seçerek;


Üstteki menüden Dışa aktara tıklıyoruz. Hiç bir ayarı değiştirmeden Git'e tıklıyoruz ve veritabanımızın yedeğini indiriyoruz.


Oluşan DBphp.sql dosyasını masaüstümüze alalım ki sunucuya yüklerken birdaha dosya yolunu göstermekle uğraşmayalım.


Şimdi sunucumuza giriş yapalım. Giriş yaptıktan sonra menüden Gelişmiş Araçların altında bulunan Veri Tabanı Yöneticisi' ne tıklıyoruz.


Açılan pencerede yeni bir veritabanı oluşturmamız gerekiyor.Veritabanı adının başında değiştirilemez bir isim yer alıyor ve devamında koymak istediğimiz veritabanı adını yazıyoruz. Ben değiştirilemez ismin devamına "dbphp" ekliyorum. Şifremi yazıyorum. Veritabanı oluştura tıklıyorum.


Oluşan veritabanı hemen sayfanın alt tarafında görüntüleniyor.



Burada Yönetim Başlığı altında bulunan "phpMyAdmin 4 See all tools" linkine tıklayarak sunucumun phpmyadmini ni açıyorum.


Açılan panelde İçe aktara tıklıyorum.

Gözata tıklıyorum. Burada DBphp.sql dosyamı daha önceden masaüstüme almıştım. Masaüstüne aldığım dosyamı seçiyorum ve Git' e tıklayarak sunucumdaki veritabanıma yedeklemiş olduğum veritabanını yüklemiş oluyorum.

Şimdi projemizin geri kalanına devam edelim.

Kullanılan materyaller:
- DBphp.sql

Android ile Php Web Service Kullanmak | Php web service use with Android (Videolu Anlatım)

Merhabalar Arkadaşlar, Yakın zamanda Android ile Asp.Net web servis kullanımı ile ilgili bir projeyi beraber yapmıştık. Şimdi Android uygulaması ile birlikte php web servis kullanımı yapacağız. Yapacağımız servisler web üzerinde canlı olarak yayın yapacak. Lokal de sınırlı kalmayacağız. Böylece canlı ortamda uygulamalarımızın çalışırlığınıda bir nevi öğrenmiş olacağız. Biliyorsakta bilmeyen arkadaşlarımız için öğretici bir yazı olacak.

Android uygulamamız olarak basit bir uygulama olacak. İçerisinde üyelik bilgileri ile ekle, sil ve listele özelliği bulunan bir uygulama yapaccağız. Verilerimiz, android uygulamamızdan web servislerimiz aracılığıyla veritabanımıza ulaşacak.

Kullanılan Uygulamalar
- Android (Android Studio)
- Lokal sunucu (Xampp server) - Phpmyadmin kullanılacak.
- Web Hosting - Linux (Biz.nf - http://cp1.biz.nf/beta)
- Notepad++ (Web servis)
- FileZilla
- Advanced Rest Client (ARC - Web servis client)
- TeamViewer (Android Emülator)

Kurulumlar:
- Android Studio Kurulumu
- Lokal Sunucu Kurulumu
- Web Hosting Üyeliği alma
- Notepad++ Kurulumu
- Advanced Rest Client Kurulumu
- TeamViewer Kurulumu PC - Mobil Bağlantısı

1- Web hosting' den öncelikle üyeliğimizi alalım. Videolu anlatım.
2- Mysql veritabanımızı oluşturalım ve sunucuya yükleyelim. İkinci işlem olarak Android uygulamamızın tasarımını oluşturalım. Videolu anlatım.
3- Web servislerini Androidin isteklerine göre oluşturacağız. Videolu anlatım.
4- Android ile uye ekleme işlemini gerçekleştirelim. Videolu anlatım.
5- Android ile uye listeleme işlemini gerçekleştirelim. Videolu anlatım. 
6- Android ile uye silme işlemini gerçekleştirelim. Videolu anlatım.

Uygulamamızın sonuna gelmiş bulunmaktayız.


-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Uygulamamızda kullanılan dosyalara aşağıdaki linklerden edinebilirsiniz.



- Web Servisleri :
- Android Uygulama :
- DBphp.sql:





2 Nisan 2016 Cumartesi

html ile asenkron yapı kullanımı | use asenkron communication with html

En aşağıda gördüğümüz a href linkleri ile java fonksiyonuna parametre gönderiyoruz. Gönderdiğimiz parametre sonucu ilgili html sayfasını,

document.getElementById("ortaForm").innerHTML = xmlhttp.responseText;

komut satırında ortaForm id' sine sahip etiketin içersine gönderiyoruz.
fonksiyon içerisindeki yapı sayesinde çağırdığımız html sayfasını ana sayfa yenilenmeden yapıyoruz. Böylece oluşturulmuş projedeki sitenin performansının daha iyi olmasını sağlar. AJAX ile daha kullanışlı sayfalar oluşturabiliriz. Gerekli araçları kullanarak bir sayfada birden fazla işlem yaptırabiliriz. 


Bu yapı sadece html çağırımı ile sınırlı değildir. Php, .txt, .xml, .json vb. birçok değişik dosyayı asenkron biçimde çağırmaktadır.

<html>
<head>
    <script>
        function listele(file)
        {   
            if (window.XMLHttpRequest)
            {
                xmlhttp = new XMLHttpRequest();
            }
            else
            {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function()
            {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                {
                    document.getElementById("ortaForm").innerHTML = xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET", file, true);
            xmlhttp.send();
        }
    </script>

</head>
<body>

    <a href="#" onclick = "
listele('ders.html')"> 1. Yarıyıl derslerini listele </a></br>
    <a href="#" onclick = "
listele('ders2.html')"> 2. Yarıyıl derslerini listele </a>

    <div style="border:1px solid red; width:500px; height:250px;">

        <div id="ortaForm">
        </div>
   
    </div>
</body>
</html>


Herhangi bir hata almanız durumunda, projenizdeki <script> tagları bu yapının kullanımını engelleyebilir. diğer script taglarını silip bu yapıyı birde öyle deneyin ve çalıştığını göreceksiniz.

1 Nisan 2016 Cuma

Sql injection Savunma Yolları - İnputları Filtrelemek | defense of inputs for SQL injection - Filtre inputs

Sql injection bir forma parametre girerek onu ilgili yere göndererek gerçekleştirilir. Bu gönderme sonucunda veri tabanı ile ilgili işlemler yapılır. Bu işlemlerin amacını girdiğimiz input değerleri ile değiştirebilmekteyiz. Biz geliştiriciler olarak fonksiyonumuzun amacı dışına çıkmasını istemeyiz. Bu yüzden de bu gibi input değerlerini engellemeliyiz. Öncelikle ne gibi inputlar la bizim fonksiyonumuzun amacını değiştirdiklerini bir görelim:

"select * from Admin Where AdminAdi = '" + input1 + "' and ' AdminSifre = '" + input2 + "'"

bu sorgumuzun sonucunda Admin adi ve şifresi ile eşleşen bir veri olursa değerimiz pozitif olacaktır. Eşleşme olmazsa değerimiz null olarak dönecektir. Bu sorguyu kötü niyetli kişiler istediği gibi girebilebilir. Mesela admin adı için girilen input 1 değeri

1' or '1' = '1'"-- olursa şöyle bir tablo ortaya çıkacaktır.

"select * from Admin Where AdminAdi = '1' or '1' = '1'"--' and ' AdminSifre = '" + input2 + "'

bu sorgu sonucu pozitif olarak dönecektir. Çünkü 1=1 sorgusu sayesinde sorgunun değeri 1 olacaktır ve AdminSifre bilgisi yorum satırı olarak görülecektir. Bu gibi açıklıklar için savunma yollarını konuşalım.

Örneklerimi C# üzerinden vereceğim fakat bu fikirleri kullanarak istediğiniz dilde sizde oluşturabilirsiniz.

1- Öncelikle bu örneğimizin önüne geçecek bir filtre oluşturalım.

            public static string Temizle(string Metin)
        {
            string deger = Metin;
            try {
            deger = deger.Replace("'", "");
            deger = deger.Replace("<", "");
            deger = deger.Replace(">", "");
            deger = deger.Replace("&", "");
            deger = deger.Replace("[", "");
            deger = deger.Replace("]", "");
            }catch(Exception e) { }
            return deger;
        } 

 bu fonksiyonumuzu kullanarak özel işaretlerin silinmesini engelleyebiliriz. Böylece kötü niyetli kişiler sorgumuzun amacını değiştiremez.

2- İnput değerimizin sadece sayı olarak girilmesini istiyorsak;

        public static string sayikontrol(string Text)
        {
            try
            {
                int x = Convert.ToInt32(Text);
            }
            catch
            {
                Text = "0";
            }

            return Text;
        }


kullanabiliriz. Böylece sayı olarak girilmeyen karakterlerin engellenmesini sağlamış oluruz.

3- Url adresini input olarak alır isek şöyle bir filtre uygulayabiliriz.

        public static string UrlSeo(string Metin)
        {
            string deger = Metin;
            deger = deger.Replace("'", "");
            deger = deger.Replace(" ", "_");
            deger = deger.Replace("<", "");
            deger = deger.Replace(">", "");
            deger = deger.Replace("&", "");
            deger = deger.Replace("[", "");
            deger = deger.Replace("]", "");
            deger = deger.Replace("ı", "i");
            deger = deger.Replace("ö", "o");
            deger = deger.Replace("ü", "u");
            deger = deger.Replace("ş", "s");
            deger = deger.Replace("ç", "c");
            deger = deger.Replace("ğ", "g");
            deger = deger.Replace("İ", "i");
            deger = deger.Replace("Ö", "o");
            deger = deger.Replace("Ü", "u");
            deger = deger.Replace("Ş", "s");
            deger = deger.Replace("Ç", "c");
            deger = deger.Replace("Ğ", "g");

            return deger;
        }

böylece türkçe karakterler ve bazı özel karakterlerin kullanılmasını engelleyebiliriz.

4- İnputlarımız için validator(doğrulayıcı) kullanımı oldukça iş görmektedir.  Bunun için ilgili makalelerde arama yapabilirsiniz. Size bu konuyu bir örnekle kısaca açıklayayım.

<td class="style2">
    <asp:TextBox ID="txtemail" runat="server">
    </asp:TextBox>
 </td>

 <td>
    <asp:RegularExpressionValidator ID="remail" runat="server"
       ControlToValidate="txtemail" ErrorMessage="Mail adresini gir"
       ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
    </asp:RegularExpressionValidator>
 </td>


burada email adresinde farklı karakterler olması durumunda input değerini kabul etmeyecektir ve ekrana ilgili hatayı bastıracaktır.

5- Url de görülen get metodu ile aldığımız bazı veriler bizim savunmasız kalmamıza neden olabilmektedir. Örneğin:

http://savunmasizsite.com/index.asp?id=1; SHUTDOWN WİTH NOWAIT;

parametresini girerek idnin yanındaki noktalı virgül ile sql cümlesini tamamlar ve yanındaki diğer komut cümlesi ile sql veritabanınızın servis hizmetini durdurabilir. Bu durumda bizim savunmamız burada gelen parametrenin belli uzunlukta olması gerektiğidir. Parametre uzunluğunu kısıtlarsak buradaki sorgu amacına ulaşmayacak ve veritabanımız hizmeti sağlamaya devam edecektir.

6- C#' ta sql sorugu için daha güvenilir bir kullanım mevcuttur. Sql sorgusunda parametre kullanılmalıdır. Yani;

string cmdStr = "SELECT * FROM Users WHERE UserName=@UserName AND Password=@Password";
SqlCommand cmd = new SqlCommand(cmdStr, sqlConnection);
cmd.Parameters.Add("@UserName",SqlDbType.NVarChar,50);
cmd.Parameters.Add("@Password",SqlDbType.NVarChar,50);
// İlk veri girişi
cmd.Parameters["@UserName"].Value="Burak";
cmd.Parameters["@Password"].Value="Burak12041976";
cmd.ExecuteNonQuery();


Bu sayede gelen parametreler tek tırnaktan bağımsız çalışacaktır ve hız açısından da bu kullanım önerilmektedir. Görüldüğü gibi gelen parametre tipleride belirlenmiş oldu. Veri tipleri farklı olursa bir engelleme söz konusu olacaktır.



Zamanla başka savunma yöntemlerimi sizinle bu yazımda tekrar paylaşacağım. Tekrar görüşmek üzere.

31 Mart 2016 Perşembe

Android ile Web Servis Kullanmak (Asp.Net) | asp.net web service use with Android (Video)

Asp.Web servisi oluşturuldu. Bu servisin içersinde sunucuya yüklenmiş olan veritabanına veri ekleme ve verileri getirme özellikleri içeren fonksiyonlar tanımlandı. Bu sayede Android uygulaması ile geliştirilen uygulamanın bu servisi kullanarak parametre göndermesi ya da bu servisten veri istekleri yapması sağlanmıştır. Böylece uygulama istekte bulunduğu web servis ile sunucudaki veritabanına ulaşması sağlanmıştır.

Birde bu yapıyı videolarla ve ya makale ile anlatmaya çalıştım. Kolay gelsin

1 - Somee.com'a üye olundu.



2 - VeriTabanı oluşturma ve bu veritabanını sunucuya yükleme işlemleri yapıldı.




3 - Asp.net Web servis projesi oluşturuldu. Web servis ile veri ekleme ve listeleme yapıldı. Web servis sunucuya yüklendi.



4 - Android uygulaması için proje oluşturuldu. Bu projenin ana menüsü tasarlandı ve çalışır hale getirildi.



5 - Android uygulaması ile web servis bağlandı. Web servise parametreler gönderilerek veri ekleme işlemi yapıldı.



6 - Android uygulama ile web servis bağlandı. Web servisten uygulamaya veriler getirildi ve veri listeleme yapıldı.



Projenin Dökümanları :
- Sql Veri Tabanı
- Asp.net web servis
- Android projesi

30 Mart 2016 Çarşamba

Android ile Web Servis Kullanmak (Asp.Net) | asp.net web service use with Android

Merhabalar arkadaşlar,
(Videolu anlatım)
Web Servis konusunda size yardımcı olmaya çalışacağım, Bu makalemde size android programlama yapanlar için, asp.net ile oluşturacağımız web servisini kullanmayı basit bir şekilde anlatmaya çalışacağım.

Öncelikle servisimiz için bir veritabanı oluşturalım. (MsSql oluşturma)

Veritabanımız hazır sırada webservisimizi oluşturalım. (Asp.net Web Servis Oluşturma)

Son olarak android ile bu servisleri kullanmak kaldı.
Android Studiomuzu açıyoruz ve yeni proje oluşturuyoruz. Projemizin adını WebServis koydum ve next dedim;

sonraki ekranda hiç bir değişiklik yapmadan next diyerek geçiyorum;

sonraki ekranda boş bir aktivity projesi seçeceğim. Bunun için "Add No Activity" seçiyorum. Finish tıklıyorum. Projemin oluşmasını bekliyorum.


Projem oluştuktan sonra ekranın solundaki "Project" etiketine tıklayarak projenin dosya hiyerarşisini görüntülüyorum. Bu görüntünün "Android" dosya hiyerarşisi olmasını istiyorum.
Projeme ilk olarak bir java sınıfı eklemek istiyorum. Eklemek için com.webservis klasörünün üzerine sağ tıklıyorum sonra New>Java Class tıklıyorum. Yeni sınıfımın adını "MainActivity" yazıyorum ve OK tıklıyorum. artık yeni sınıfım eklenmiş oluyor. Yeni sınıfıma aşağıdaki kodları ekliyorum.


MainActivity.java
package com.webservis;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    Button bEkle, bListele, bSil;
    TextView etIP;
    String Url;
    View.OnClickListener Listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        install_elements();
        bEkle.setOnClickListener(Listener);
        bListele.setOnClickListener(Listener);
    }
    private void activity(Class c)
    {
        Intent intent = new Intent(MainActivity.this,c);
        intent.putExtra("Url", Url);
        startActivity(intent);
    }

    private void install_elements() {
        bEkle = (Button) findViewById(R.id.bEkleGit);
        bListele = (Button) findViewById(R.id.bListeleGit);
        etIP = (TextView) findViewById(R.id.etIP);
        Url = "http://denemelerdenemeler.somee.com/"; //--> Somee.com
        //Url = "http://10.7.1.183/";  //---> Ev ip
        //Url = "http://10.7.1.113/";    //---> Okul ip

        Listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                switch (v.getId()) {

                    case R.id.bEkleGit:     activity(Ekle.class);    break;
                    case R.id.bListeleGit:  activity(Listele.class);   break;
                    default:                break;
                }
            }
        };
    }
}


Bu sınıf için bir görünüm dosyası oluşturmam lazım. Bu dosyayı oluşturabilmek için dosya hiyerarşisideki res klasörüne sağ tıklıyorum. New>Android resource directory tıklıyorum ve "Directory Name" kısmına "layout" yazıyorum ve OK butonuna tıklıyorum. Bu sayede klasörümüze layout dosyasını eklemiş oluyoruz. Bu klasörün altında yeni bi dosya oluşturacağım. layout klasörünün üstüne sağ tıklıyorum New > Layout resource file tıklıyorum. "File name" kısmına "activity_main" yazıyorum ve OK tıklıyorum. Oluşturduğum bu dosyaya çift tıklıyorum ve aşağıdaki gibi layout dosyanın text kısmına giriyorum. Aşağıda text kısmının nerede olduğunu görebilirsiniz.


Bu kısma aşağıdaki kodlarımı ekliyorum:

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_marginTop="100dp"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/bEkleGit"
        android:text="Ekle"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/bListeleGit"
        android:text="Listele"
        android:layout_gravity="center"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/abc_action_button_min_width_material"
        android:id="@+id/etIP"/>
</LinearLayout>
 

Main Activity sınıfımız ile menü ekranımızı oluşturmuş oluyoruz. Bu ekranda Ekleme ve Listeleme butonları mevcuttur. Bu butonlara tıklandığında yeni görünümlere gidilecek. Bu görünümlerden ilki ekle görünümü. Öncelikle Ekle java sınıfımızı oluşturalım. Bunun için com.webservis klasörümüze sağ tıklayarak yeni bir java sınıfı oluşturacağız. Sınıfımızın adını "Ekle" koyuyorum. Aşağıdaki kodları bu sınıfıma ekliyorum.

Ekle.java
package com.webservis;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.net.URI;
import java.net.URLEncoder;

public class Ekle extends Activity {

    EditText etIsim, etEmail;
    Button bEkle;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ekle_main);
        install_elements();

        bEkle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new PhpGetSendWS().execute();
            }
        });

    }

    class PhpGetSendWS extends AsyncTask<String, String, String>
    {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {

            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpGet request = new HttpGet();

                String isim = URLEncoder.encode(etIsim.getText().toString(),"utf-8");
                String email = URLEncoder.encode(etEmail.getText().toString(), "utf-8");

                request.setURI(new URI(getIntent().getStringExtra("Url") +
                        "uyelik.asmx/UyeEkle?AdSoyad=" + isim + "&E_posta=" + email));
                //Get isteğimizi URL yoluyla belirliyoruz.

                if(!httpclient.execute(request).equals(null)) //İsteğimizi gerçekleştiriyoruz.
                {
                    ToastYazdir("Eklendi");
                    Thread.sleep(1500);
                    Intent i = new Intent(Ekle.this,Listele.class);
                    i.putExtra("Url", getIntent().getStringExtra("Url"));
                    startActivity(i);
                }

            }catch (Exception e)
            {
                ToastYazdir("Hata oluştu.");
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
        }

    };
    public static String convertStreamToString(java.io.InputStream is){
        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
        return s.hasNext() ? s.next():"";
    }
    private void ToastYazdir(final String str)
    {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void install_elements()
    {
        etIsim = (EditText) findViewById(R.id.etIsim);
        etEmail = (EditText) findViewById(R.id.etEmail);
        bEkle = (Button) findViewById(R.id.bEkle);
    }
}


Bu kodları Ekle sınıfımıza ekledikten sonra Http kütüphanesini dosyamıza dahil etmeliyiz. Http Kütüphanesini Ekledikten sonra Ekle sınıfımızın layout dosyasını ekleyelim. Dosya hiyerarşisindeki layout klasörüne daha öncedende eklediğimiz gibi sağ tıklayarak "ekle_main" adında layout ekliyorum. Bu layouta çift tıklıyorum ve Text bölümüne aşağıdaki kodları yapıştırıyorum.

ekle_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:layout_marginTop="100dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Ad ve Soyad"
        android:ems="10"
        android:id="@+id/etIsim"
        android:layout_gravity="center_horizontal" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:hint="Email"
        android:ems="10"
        android:id="@+id/etEmail"
        android:layout_gravity="center_horizontal" />

    <Button
        android:layout_marginTop="50dp"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="Ekle"
        android:id="@+id/bEkle"
        android:layout_gravity="center_horizontal" />
</LinearLayout>


Daha sonra ana ekranımızdaki listeleme özelliğini yapacağız. Bunun için Listele sınıfımı oluşturacağım. Oluşturabilmem için com.webservis dosyama sağ tıklıyorum ve yeni bir java sınıfını "Listele" adı altında ekliyorum. Bu sınıfıma aşağıdaki kodları ekliyorum.

Listele.java

package com.webservis;


import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Listele extends Activity {
    ArrayAdapter<String> adapter;
    String resp = null;
    ArrayList<String> data = new ArrayList<>();
    boolean post=false;

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

        new AspData().execute();

    }

    public class AspData extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {

/*
            // GET METODU

            DefaultHttpClient hc = new DefaultHttpClient();
            ResponseHandler response = new BasicResponseHandler();
            HttpGet http = new HttpGet(getIntent().getStringExtra("Url")+"uyelik.asmx/GetUyeler?");

            try {
                resp = (String) hc.execute(http, response);
                resp = cutstring(resp);

                JSONArray json = new JSONArray(resp);

                for(int i=0;i<json.length();i++){
                    JSONObject e = json.getJSONObject(i);
                    data.add(e.getString("AdiSoyadi") + " - " + e.getString("Eposta"));
                }

                adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,data);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
*/

          
            // POST METODU
            try
            {
                HttpClient httpClient=new DefaultHttpClient();
                HttpPost httpPost=new HttpPost(getIntent().getStringExtra("Url")+"uyelik.asmx/GetUyeler");
                HttpResponse httpResponse=  httpClient.execute(httpPost);
                resp = readResponse(httpResponse);
                post = true;
                resp = cutstring(resp);

                JSONArray json = new JSONArray(resp);

                for(int i=0;i<json.length();i++){
                    JSONObject e = json.getJSONObject(i);
                    data.add(e.getString("AdiSoyadi") + " - " + e.getString("Eposta"));
                }

                adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,data);
            }
            catch(Exception exception)  {}


            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            ListView lv = (ListView) findViewById(R.id.myListView);
            lv.setAdapter(adapter);
        }

        private  String cutstring(String resp)
        {
            resp = resp.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
            resp = resp.replace("<string xmlns=\"http://tempuri.org/\">", "");
            resp = resp.replace("</string>","");
            if(!post)
                resp = resp.substring(2,resp.length());
            return resp;
        }
        public String readResponse(HttpResponse res) {
            InputStream is=null;
            String return_text="";
            try {
                is=res.getEntity().getContent();
                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
                StringBuffer sb = new StringBuffer();
                String line="";
                while ((line=bufferedReader.readLine())!=null)
                {
                    sb.append(line);
                }
                return_text=sb.toString();

            } catch (Exception e)  { }
            return return_text;
        }
    }

}


sonrasında bu sınıfın görünüm dosyasını ekliyorum. Bunun için layout klasörüme sağ tıklıyorum yeni bir layout dosyasını "listele" adı altında ekliyorum. eklediğim bu dosyanın Text bölümüne geçip aşağıdaki kodları ekliyorum.

listele.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/myListView"
        android:background="@color/accent_material_light"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>


projemin bütün sınıflarını ve görünümlerini tamamladım.Geriye tek bir adım kaldı buda AndroidManifest.xml dosyama aşağıdaki kodları eklemem. Bu kodlar Activity sınıfından kalıtım alan sınıfların görünümlerini sağlaması açısından luzumludur.

Android manifest dosyama;

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.webservis">

<application android:allowBackup="true" android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher" android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Ekle" >
        <intent-filter>
            <action android:name="android.intent.action.EKLE" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name=".Listele" >
        <intent-filter>
            <action android:name="android.intent.action.LISTELE" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>


ekledikten sonra artık projemi çalıştırabilirim. Android studio da projemi çalıştırıyorum.
    Run > Run 'app'  (Shift + F10)


telefonda ilk olarak ekleme işlemi yapacağım bunun için Ekle butonuna tıklıyorum.



Ad Soyad ve Email bölümüne verilerimi yazıyorum ve Ekle butonuna tıklıyorum. Eklendi uyarısını aldıktan sonra listeleme ekranına yönlendirme yapıldı.


Görüldüğü gibi listeleme ekranında girdiğim veri görüntülendi.

Evet arkadaşlar Asp.net ile Web servisimizi oluşturduk, Sql veritabanımız ile web servisimizi bağladık ve android ile bu servisi kullandık. Buradaki ekranlarımız yaptığımızın uygulamanın görüntüleridir. Herhangi bir sorun olursa yorum olarak belirtirseniz yardımcı olmaya çalışacağım.

Proje Dökümanları :
- Sql Veri Tabanı 
- Asp.WebServis
- Android Uygulaması


28 Mart 2016 Pazartesi

Json.net kütüphanesini C# projesine eklemek | add json.net library in C# project

Visual Studioyu ile projemizi açıyoruz. Üst menüden "Tools > Nuget Package Manager > Manage Nuget Package for solution" seçilerek paket yöneticimizi açıyoruz. Burada Browse seçilerek arama kutusunda "json.net" diye arama yaptırıyoruz. Arama sonucunda "Newtonsoft.Json" paketi seçilerek sağ menüden projemize tik atıyoruz ve install diyerek yüklemeyi başlatıyoruz. Karşımıza çıkan koşulları OK diyerek kabul ediyoruz. Ve artık projemize json.net kütüphanesi eklemiş oluyoruz.

26 Mart 2016 Cumartesi

httpclient kütüphanesi tanımlanamıyor | cannot resolve httpclient android studio

Android studioda webservisi yazarken karşılaştığım bir sorunu sizinle paylaşmak istiyorum. HttpClient sınıfından bir nesne türetecektim. Projemin Kütüphaneyi tanımlamadığını farkettim. Araştırdıktan sonra bu sorunun build dosyasına http kütüphanesini eklememizin gerekli olduğunu anladım. Bunun için build dosyamıza aşağıdaki kod parçasını

useLibrary 'org.apache.http.legacy'

aşağıdaki gibi ekliyoruz.


en son sync ederek HttpClient sınıfını kullanabiliriz.
 

20 Mart 2016 Pazar

Javascript ile substring fonksiyonu | substring use with javascript

var deneme = "Merhaba Dünya";
var sbstr = deneme.substring(1,4);

çıktımız aşağıdaki gibi olacaktır;

erh 

19 Mart 2016 Cumartesi

Türkçe'de soru işareti problemi | problem of Turkish character �

� kodlamanızda bu şekilde bir karakter problemi yaşıyorsanız sebebi, kodlama yaptığınız editörün UTF-8 olmamasından kaynaklanmaktadır. Editörünüzün kodlama dilini UTF-8 yapın ve bozulan karakterleri tekrardan türkçe alfabeyi kullanarak düzeltin. Görüntüleme işlemini yaptığınızda � sorunu ortadan kalkacaktır.

Json dosyasını javascript ile okutmak | read json file with javascript


function loadJSON(file, callback) {  
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', file, true);
    xobj.onreadystatechange = function () {
          if (xobj.readyState == 4 && xobj.status == "200") {
            callback(xobj.responseText);
          }
    };
    xobj.send(null); 
}


function load() {
    loadJSON("datas.json", function(response) {
        var obj = JSON.parse(response);
        alert(obj.data[0].name);

    });
}


öncelikle load() fonksiyonun çağırıyoruz. Bu fonksiyon json dosyasının okunması için loadJSON fonskiyonunu çağırmaktadır. loadJSON fonskiyonunu çağırırken json dosyamızın adını parametre olarak yazıyoruz. dosyanın içeriği bize response olarak dönüyor. Dönen içeriği parse ediyoruz ve artık json verilerimize obj.data[id] ile istediğimiz gibi ulaşabiliyoruz.

Html table kenarlıklar arası boşluk sıfırlama | Html cellpadding cellspacing

<table cellpadding="0" cellspacing="0">
...
</table>

tablonun th td lerine border uygulandığında border arasındaki boşlukları sıfırlamak isteriz. Bu yüzden yukarıdaki table etiketindeki cellpadding ve cellspacing özelliklerini kullanarak mesafeler arası boşlukları kaldırmış oluruz.

XAMPP sunucu dosyası nerede ? | Where is the server files for XAMPP ?

Ayrı zamanda sunucu olarak iş yapan xampp server'ın Apache sunucusunu start dedikten sonra  xampp > htdocs  klasöründeki dosyalar



herhangi tarayıcıdan localhost'a bağlanınca (varsayılan port numarası farklıysa örn:localhost:8080,localhost:4433 ise) dosyalarınızı görüntüleyebileceksiniz.

Html tag içinden javascript fonksiyonunu çağırma | Calling javascript function inside HTML tag

bu özelliği HREF etiketi ile kullanabiliriz.

<a href="javascript:hello()" > link'e tıklayın </a>

ve ya 

ondblclick özelliğini de bu iş için kullanabiliriz.

<a href="#" ondblclick="hello()" > link'e tıklayın </a>

 

17 Mart 2016 Perşembe

Css ile link (a href) rengi değiştirme | change color of a href

a:link {color: white;}
a:visited {color: white;}
a:active {color: white;}
a:hover {color: antiquewhite;}
a {
    text-decoration:none;
}

css etiketleriyle linklere istediğimiz biçimi verebiliriz.

Liste elemanlarını yan yana yazma | display ul li side by side

ul {
         list-style: none outside none;
}
li {
          position: relative;
          display: inline;
          margin: 20px;
}

css kodlarıyla liste elemanlarını yan yana görünümü sağlayabilirsiniz.

HTML Title Turkish character | HTML de title etiketinin türkçe karakter görüntülememesi

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-9">

<META HTTP-EQUIV="Content-language" CONTENT="tr">

Html kodlamada title etiketinde bozuk karakter görüntülenmesinden dolayı türkçe karakter problemimizi yukarıdaki meta taglarını head kısmına ekleyerek düzeltebiliriz.

 

27 Şubat 2016 Cumartesi

.zip oluşturma | How to make a .zip file

Öncelikle Winrar programımızın olduğunu kontrol etmeliyiz. Yoksa : İndir
Ziplemek için dosyaların hepsini seçiyorum ve sağ tıklıyorum ve "Add to arcivhe..." seçeneğini tıklıyorum.
 

Açılan pencerede "Archive format" olarak ".zip" seçiyorum ve  "Compression method" tıklayarak "best" seçeneğini seçiyorum. Tamam diyorum.


 Yeni dosyamız "WebSite.zip" adında aynı hedefte oluşturulmuş olacaktır.

 

26 Şubat 2016 Cuma

Asp.Net Web Servis oluşturma | Create Asp.net Web Service

Visual studio ile bir asp.net Web Application oluşturuyoruz. "File > New > Project" seçilerek karşımıza çıkan pencerede "Visual C# > Web" seçilerek sağ menüden "ASP.Net Web Application" seçilir. "Name" olarak site ismi yazılır. Ben üyelik örneği vereceğim için Uyelik ismini veriyorum ve tamama tıklıyorum. Daha sonra Empty özelliğini seçerek boş projemi oluşturuyorum.



Oluşan projemin solution explorer görünümünü açıyorum. Burada projeme web servis ekleme işlemi yapacağım. Eklemek için solution explorerdaki projemin isminin üstüne gelerek sağ tıklıyorum, "add > New item" diyorum. Açılan penceredeki Web sekmesine tıklanarak sağdaki listeden Web Service(ASPX) seçiyorum ve "uyelik.asmx" ismini veriyorum ve add diyorum.

 

Böylelikle web servisimizi oluşturmuş oluyoruz. Sırada bu servise bağlayacağımız veritabanı işlemleri var. Veri tabanımızı bu projemize eklememiz gerekmektedir.

Veritabanımızı eklemek için solution explorer görünümündeki projemizin üzerine gelerek sağ tıklıyoruz. "Add>New item" seçiyoruz. Açılan pencerede "Visual C#>Code" seçilir ve sağ listeden "Class" seçilerek sınıf ismi girilmelidir. Ben "Fonksiyon" olarak sınıf ismimi giriyorum ve ekleye tıklıyorum.


yeni oluşturduğumuz Fonksiyon.cs sınıfımızın içerisine aşağıdaki fonksiyonlarımızı yapıştırıyoruz. baglan() isimli fonksiyonumuzun içindeki SqlConnection isimli fonksiyonumuzun parametresine connectionstring' imizi yapıştırıyoruz.


public Fonksiyon(){
            //
            // TODO: Add constructor logic here
            //

}
public SqlConnection baglan()

{
     SqlConnection baglanti = new SqlConnection("workstation id=UyelikDB.mssql.somee.com;packet size=4096;user id=denemebaglantisi;pwd=*******;data source=UyelikDB.mssql.somee.com;persist security info=False;initial catalog=UyelikDB");
     baglanti.Open();
     return (baglanti);

}
public int cmd(string sqlcumle)
{
     SqlConnection baglan = this.baglan();
     SqlCommand sorgu = new SqlCommand(sqlcumle, baglan);
     int sonuc = 0;

     try
     {
          sonuc = sorgu.ExecuteNonQuery();
     }catch (SqlException ex)
     {
          throw new Exception(ex.Message + " (" + sqlcumle + ")");
     }
     sorgu.Dispose();
     baglan.Close();
     baglan.Dispose();
     return (sonuc);

}
public DataTable GetDataTable(string sql)

{
     SqlConnection baglanti = this.baglan();
     SqlDataAdapter adapter = new SqlDataAdapter(sql, baglanti);
     DataTable dt = new DataTable();
     try
     {
         adapter.Fill(dt);
     }catch (SqlException ex)
      {
          throw new Exception(ex.Message + " (" + sql + ")");
      }
      adapter.Dispose();
      baglanti.Close();
      baglanti.Dispose();
      return dt;

}

Projemize yeni bir .class oluşturuyorum. Projeye sağ yık > New item> Visual C# > Class tıkaladım ve adını UyeModel girdim tamam dedim.
UyeModel sınıfının kodları aşağıdadır.

namespace Uyelik
{
    public class UyeModel
    {
        public string AdiSoyadi { get; set; }
        public string Eposta { get; set; }
    }
}


Şimdi uyelik.asmx.cs dosyamıza yeni bir method yazacağız. Bu method bize bütün üyelerin bilgilerini getirecektir. Üye bilgilerini getirirken verilerimizi json formatına çeviriyoruz. Json.Net kütüphanesini kullanarak dönüştürme işlemini yapacağız. JsonConvert nesnesi bu kütüphane içersinde tanımlıdır. "Json.Net Kütüphanesi Ekle"  Methodumuz;

Fonksiyon db = new Fonksiyon();
[WebMethod]
public string GetUyeler()
{
     List<UyeModel> uyemodel = new List<UyeModel>();
     foreach (DataRow item in db.GetDataTable("select * from Uyeler").Rows)
     {
         uyemodel.Add(new UyeModel { AdiSoyadi = item["AdiSoyadi"].ToString(), Eposta = item["Eposta"].ToString() });
     }
     return JsonConvert.SerializeObject(uyemodel);

}

olacaktır. Bu method ile üye bilgilerimizi çekeceğiz. Birde üye ekleme methodu yazacağız. Bu method dışarıdan alacağı parametreler ile üye ekleme işlemi yapacaktır. Bu methodumuz;

[WebMethod]public void UyeEkle(string AdSoyad, string E_posta){
     db.cmd("insert into Uyeler (AdiSoyadi,Eposta) values ('" + AdSoyad + "','" + E_posta + "')");
 }

Bu metodumuza ad, soyad ve eposta bilgileri gelerek veritabanına kayıt işlemi gerçekleştirilmektedir. Projemiz sadece localde çalışacak şekildedir. sunucuda çalışabilmesi için web.config dosyamıza aşağıdaki kod parçasını yapıştırıyoruz.

<configuration>
    <system.web>
     <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>
 
Şimdi visual studioda oluşturduğumuz bu projeyi build edelim sonrasında publish ederek sunucumuza yükleyeceğiz. Ben sunucu olarak bedava olduğu için somee.com'u kullanacağım. Daha önceden üyelik aldığım bu sunucudan ("Somee.com Üyelik Oluşturma") yeni web sitemi oluşturacağım.

 User > Managed products > Websites tıklıyoruz. açılan menüden create diyorum.


 Creare website sayfasında Site adını "denemelerdenemeler" koyuyorum, bu alan daha önce ismi alınmamış alan ismi olmalıdır. Asp.Net version seçeneğini projemizde kullandığımız versiyonla aynı olmalıdır. Biz 4.0, 4.5 seçiyoruz. İsterseniz site title ve description alanlarını doldurabilirsiniz. En son create diyoruz ve sitemizi yayınlanabilir hale getiriyorum.


 Sitemizi oluşturduktan sonra aşağıdaki gibi bir ekran gelecektir. Manage website linkine tıklıyorum ve burada projemizde publish ettiğim dosyayı upload edeceğim.


 Website properties sayfasına yönleneceğiz. Bu sayfada faremizin tekerleğini aşağıya kaydırarak sayfanın altında bulunan özellikleri kullanacağız. Burada "File manager" linkini tıklıyorum.

 

 File manager sitemizin dosya yönetimini yapan sayfamızdır. Bu sayfada publis dosyalarımı upload edeceğim. Sayfada default.asp isimli dosyamı işaretliyorum ve "Delete" butonuyla siliyorum. Daha sonra publish ettiğim dosyalarımı "Uplaod" butonuna tıklayarak upload edeceğim.

 

 Publish dosyamı zipleyerek sıkıştırıyorum. Daha sonra File manager'da Upload butonuna tıklayorum. Açılan Gözat butonlarından birini tıklıyorum ve ziplediğim publish dosyamı seçiyorum Aç diyorum. Seçilen dosyayı "Upload and Unzip archives" seçeneğini tıklayarak sunucuma dosyalarımı upload ediyorum. Bu işlem biraz zaman alabilir lütfen bekleyin.


dosyalarımız upload edildiğinde şekildeki gibi gözükecektir.


artık tarayıcımıza adresimizi yazıp servisimizin yayınlandığını görebiliriz.
"denemelerdenemeler.somee.com/uyelik.asmx" yazıyorum ve karşıma oluşturduğum web servis çıkıyor.

 

Böylece web servisimizde üye ekleme ve üyeleri getirme işlemleri oluşturulmuş uzak sunucuya bağlantı sağlanmıştır.