Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Eray Çakır
Eray Çakır
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  XML / Web Serv. Eray Çakır
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : XML / Web Serv.
Yayınlanma Tarihi : 25.1.2004
Okunma Sayısı : 38272
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 20.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 20.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 20.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 20.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Web Servisleri ile Dosya Transferi Yapmak
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu yazımda sizlere Xml Web Servisleri ve ASPdotNET ile basit bir dosya transfer uygulamasi yapmaya çalışacağız. İşe veritabanımızı oluşturmayla başlayalım :

1- ) SQL server da CsharpNedir adinda yeni bir veritabani olusturalim.
2- ) Olusturdugumuz bu veritabaninda ;



Yukardaki şekilde bir tablo oluşturduktan sonra Kayıt etme işlemi için aşağıdaki Stored Procedure'umuzu yazalım

3-)


CREATE Procedure sp_DosyaYukle
(
@Adi nvarchar(100),
@Turu nvarchar(50),
@Boyut int,
@Dosya image
)
AS
INSERT INTO tbl_Dosya(Adi,Turu,Boyut,Dosya)
VALUES (@Adi,@Turu,@Boyut,@Dosya)
GO
Yukardaki saklı yordamda ikkat ettiyseniz Tarih alanını yazmadım çünkü zaten kayit eklendiğinde mevcut bir tarih girilceği için yani her kayıtta bunu tabloyu olustururken varsayilan(default) değer olarak getdate() fonksiyonunu yazdim. Böylece program içinde ikinci bir defa kayıt etme işlemi ile uğraşmak zorunda kalmayacağım.

Yukardaki şekilde veritabanımız oluşturduktan sonra sıra web servisimizi yazmaya geldi. VS.NET editörümüzde C# dili ile bir web servisi projesi açalım. Projemizin adini CsharpNedir olarak verelim;

Daha sonra sql server sunucusuna erişim yapabilmek için web.config dosyasında tanımladığımız baglantı cümlesi anahtar kelimesine erişim yapabilmek için.

using System.Configuration

isimuzayını(namespace) ve sql server üzerine islem yapabilmek için ise

using
System.Data.SqlClient

isimuzayını(namespace) ini referans olarak belirleyelim.

Şimdi veritabanina kayit eklemek için kullanacağımız metodumuzu yazalım.


[WebMethod(Description="Veritabanina dosya yükleme yapabileceğiniz metod.")]
public string DosyaYukle(string Adi,string Turu,int Boyut,byte[] Dosya)
{
    string IslemSonucu = string.Empty;
    SqlConnection baglanti = new SqlConnection(strCon);
    SqlCommand komut = new SqlCommand();
    komut.CommandText = "sp_DosyaYukle";
    komut.CommandType = CommandType.StoredProcedure;
    komut.Connection = baglanti;

    baglanti.Open();

    #region sqlparametre lerin doldurulmasi

    komut.Parameters.Add(new SqlParameter("@Adi" ,SqlDbType.NVarChar,100
                                    ParameterDirection.Input,false,0,0,"",DataRowVersion.Proposed,Adi));

     komut.Parameters.Add(new SqlParameter("@Turu" ,SqlDbType.NVarChar,50
                                   ParameterDirection.Input,false,0,0,"",DataRowVersion.Proposed,Turu));

     komut.Parameters.Add(new SqlParameter("@Boyut" ,SqlDbType.Int,4
                                    ParameterDirection.Input,false,0,0,"",DataRowVersion.Proposed,Boyut));

     komut.Parameters.Add(new SqlParameter("@Dosya" ,SqlDbType.Image,16
                                    ParameterDirection.Input,false,0,0,"",DataRowVersion.Proposed,Dosya));

     #endregion

     try
     {
        komut.ExecuteNonQuery();
        baglanti.Close();

         return IslemSonucu = "Kayit yapilmistir";
     }
     catch(Exception ex)
     {
         return IslemSonucu = "Hata olustur : " + ex.Message;
     }
}

Yukaridaki fonksiyon ile veritabanına kayıt yapıldı veya yapılmadıysa olusan hatayı string olarak göndürebilmesi için string türünde tanımladım. Niçin string olarak tanımladığımı konumuzun ilerleyen bölümünde açıklayacağım. Simdi metodumuzu inceleyelim. Veritabanımıza yükleyecegimiz dosyamızın adını, türünü, boyutunu ve dosyamızı kayıt edebilceğimiz parametrelerimizi yazdık. Daha sonra fonksiyon içinde sqlconnection sınıfından bir baglantı nesnesi kurduk daha sonra sqlcommand ile veritabanımızda belirttiğimiz bir storedprocedure'u işlem yapabilmek için

komut.CommandText = "sp_DosyaYukle";
komut.CommandType = CommandType.StoredProcedure;
komut.Connection = baglanti;


Yukarıdaki SqlCommand nesnemizden türettigimiz komut nesnemizin CommandText özelliğine kullanmak istediğimiz stored procedure'umuzun adını, CommandType özelligine ise StoredProcedure, Text veya TableDirect türünü belirtiyoruz. Biz StoredProcedure kullandığımiz için StoredProcedure seçeneğini kullandık.

Ve kayıt işlemlerimizi yapmak için komut nesnemize parametre olarak alanlarımızı ve değerlerimizi yazıyoruz. Kayıt etme fonksiyonumuz bittikten sonra bilgileri görmek için geriye dataset döndürecek bir fonksiyon daha yazıyoruz.




[WebMethod(Description = "Kaydettiginizi veritabanina eklediginiz verileri dataset olarak islem yapabilirsiniz")]
public DataSet DosyaGoster()
{
     SqlConnection baglanti = new SqlConnection(strCon);
     baglanti.Open();
     SqlDataAdapter dataadapter = new SqlDataAdapter("SELECT Adi,Boyut,Tarih FROM tbl_Dosya",baglanti);
     DataSet dset = new DataSet("tbl_Dosya");
     dataadapter.Fill(dset,"tbl_Dosya");
     baglanti.Close();
     return dset;
}

Şekil – 1

Yukarıdaki metod ile tbl_Dosya tablosundaki tüm kayitlari dset dataset nesnemize yüklüyoruz. Bu şekilde servisimiz bittikten sonra(Sekil - 1) projemize bir adet asp.net projesi ekleyelim. Projemizin adını CsharpNedirWebUI olarak belirleyelim.

Sayfa üzerinde kullanacağımız kontroller;

1 – 1 adet Label nesnesi
2 – 1 adet HtmlFile nesnesi
3 – 1 adet Buton nesnesi

4 – 1 adet Datagrid nesnesi (Sekil – 2 )


Şekil – 2

Yukarıdaki gibi nesnelerimizi form üzerine yerleştiriyoruz. Daha sonra projemize Solution explorer penceresinden Add WebReferance diyerek web servisimizi referans veriyoruz. (Şekil – 3)



Şekil – 3

Yukaridaki şekilde işaretlemiş oldugum yerlerde ilk önce CsharpNedirWebUI projemize Add WebReferance veriyoruz ben CsharpNedirWebServisi oalrak verdim daha sonra 2. seçenek te ise bu servisi proje içinde kullanabilmek için projemin adi “.” Referans verdiğim servisin adı şeklinde referans veriyorum yani

using
CsharpNedirWebUI.CsharpNedirWebServisi;

şeklinde verdikten sonra;

proje içinde Servise erişim yapabilmek için

private DosyaTransferServisi servisim = null ;

şeklinde sayfa içinde her yerde kullanılabilir türde servisim nesnesini tanımlıyoruz.


Sayfa içinde kullanılacak Alert metodu için ;


public void Alert(string text)
{
      AddStartupScript("OnClick", "alert(\"" + text + "\");");
}

private void AddStartupScript(string name, string script)
{
      script = "";
      this.Page.RegisterStartupScript(name, script);
}

Servisimizde kayıt ekleme fonksiyonunu string olarak tanımlamamdaki sebep proje içinde bu servisi kullanırken bir alert ile veya messagebox ile geriye sonucu uyarı seklinde göstermesini saglamaktı.

Şimdi kaydet butonuna tıkladığımızda yazacağımız servisimize gidecek parametrelerimizi yazalım;


private void btnKaydet_Click(object sender, System.EventArgs e)
{
      servisim = new DosyaTransferServisi();

      if(flDosya.PostedFile != null)
      {
            HttpPostedFile dosyalar = flDosya.PostedFile;

            string dosyaAdi = dosyalar.FileName;
            string turu = dosyalar.ContentType;
            int boyut = dosyalar.ContentLength;
            byte[] dosya =new byte[boyut];

            dosyalar.InputStream.Read(dosya,0,boyut);

            string sonuc = servisim.DosyaYukle(System.IO.Path.GetFileName(dosyaAdi),turu,boyut,dosya);

            Alert(sonuc);
      }
}

Yukarıdaki metodumuzu yazdığımızda servisim.DosyaYukle fonksiyonuna flDosya nesnesinden seçtigimiz dosyanın, Adi,Tipi,Boyutu ve Dosya olarak belirttiğim değişkenlere atayarak bunu servis fonksiyonuna gönderiyorum. Gönderme işlemi sırasında servis işleniyor ve geriye dönebilecek iki sonuç string olarak tanımladığım değişkenime geliyor. Daha sonra bu sonuç değişkenini Alert metodunda kullanarak "kayıt edildi" veya "kayıt edilmedi" şeklinde bir uyarı alıyorum.



Yazım burada bitmiştir. Kısaca ne yaptığımızı açıklayacak olursak;

1- ) Web servislerini her yerde kullanabilirsiniz.

2- ) Web servislerine windows uygulamalarından erişim yaparken varsayılan olarak httpGet ve httpPost metodları kapalı olarak gelir. Bunu aşmanın yolu web.config dosyasında


 
   
    
    
   

 



tanımlamasını yapmamız gerekiyor ama microsoft bunu tavsiye etmiyor.

Sorularınız için mail adresimden irtibata geçebilirsiniz.

Örnek kaynak dosyalarını indirmek için tıklayın.

Eray Çakır
[email protected]

Makale:
Web Servisleri ile Dosya Transferi Yapmak XML ve Web Servisleri Eray Çakır
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
21
2004
Ben Yorum Olarak Değilde Yeni Başladım İnşallah :Ne Tavsiye Edersiniz Acaba Kolay veya zor bir yerden başlamak istiyorum Artık... Yardım Pls Türkçe Anlatımı Daha Çok Olan Bir Programlama olsun lütfen. Şimdiden teşekkürler
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor