C# ile bir Web Servis nasıl yazılır ve nasıl kullanılır.
Masaüstü uygulamamızın tasarımını basit bir şekilde oluşturduktan sonra artık Web Servisimizi yazmaya başlayabiliriz.
Web Servisimizi oluşturmak için Visual Studio yu açıyoruz ve File > New Project > Visual C# > Web > ASP.NET Web Service Application yolunu izleyip WebService1 isminde bir Web Servis olşturuyoruz.
"OK" diyerek Web Servisimizin oluşmasını bekliyoruz ve ilk Web Servisimizi yazmış oluyoruz ve bu adımla birlikte Visual Studio bizim için Hem Web Servisimizi oluşturdu hemde bize örnek olması açısından HelloWorld() isminde bir Web Method oluşturdu.Biz aslında Web Servis çağırırken bu servisin içindeki Web Method'ları tetikleriz.
Web Servisimizi oluşturduktan sonra üzerinde işlem yapabileceğimiz bir database oluşturalım ve bu Database içerisinede UserID (Otomotik Artan Unique bir alan), Username, Password, Age alanlarından oluşan USERS diye bir tablo oluşturalım.Oluşturduğumuz tablomuza sonradan kullanılmak üzeri bir kaç satır veri girelim.
Tablomuzuda oluşturduğumuza göre şimdi Masaüstü uygulamasından gelen kullanıcı adı paraola bilgisine göre kullanıcının sistemde var olup olmadığını kontrol eden bir "Stored Procedure" yazabilriz.
//Sistemde kullanıcının var olup olmadığını kontrol eden
eğer kullanıcı sistemde var ise bu kullanıcının bilgileri getiren bir Stored
Procedure yazalım
ALTER PROCEDURE CheckUser
(
@Username
varchar(50),
@Password
varchar(50),
@Status
smallint output --Eğer
Dönen Değer 1 ise kullanıcı mevcut eğer 0 ise kullanıcı sistemde mevcut değil
)
AS
SET @Status = 0
SELECT @Status = COUNT(*)
FROM USERS
WHERE Username
= @Username
AND Password
= @Password
IF @Status > 0 --Sistemde
Kullanıcı Mevcut ise bilgilerini dön
BEGIN
SELECT UserID,
Password,
Age,
Username
FROM USERS
WHERE Username
= @Username
AND Password
= @Password
END;
RETURN
|
Şimdi Web Servis tarafına geçip bu yazdığımız proesüdüre parametreleri geçip çağıran bir method yazalım.
private string connString
= “Buraya Connection String Gelecek”;
private static DataTable dtableUserInfo;
private bool
checkUser(string username,string password)
{
//WebServisten Datatable türünde veri dönecekseniz mutlaka
datatable nesnenize isim vermelisiniz
//dTableUsers.TableName = "USERS";
SqlConnection sConnection = new SqlConnection(connString);
//Çağırılacak prosedür adı ve bağlantı nesnesi
SqlCommand sCommand = new
SqlCommand("CheckUser",
sConnection);
sCommand.CommandType = CommandType.StoredProcedure;
SqlParameter sParamUsername = new SqlParameter("@Username", SqlDbType.VarChar,
50);
sParamUsername.Value = string.IsNullOrEmpty(username)
? Convert.DBNull : username;
SqlParameter sParamPassword = new SqlParameter("@Password", SqlDbType.VarChar,
50);
sParamPassword.Value = string.IsNullOrEmpty(password)
? Convert.DBNull : password;
SqlParameter sParamStatus = new SqlParameter("@Status", SqlDbType.SmallInt);
sParamStatus.Direction = ParameterDirection.Output;
sCommand.Parameters.Add(sParamUsername);
sCommand.Parameters.Add(sParamPassword);
sCommand.Parameters.Add(sParamStatus);
sConnection.Open();
SqlDataAdapter dAdapter = new
SqlDataAdapter(sCommand);
dtableUserInfo = new DataTable();
dAdapter.Fill(dtableUserInfo);
sConnection.Close();
return sParamStatus.Value.ToString() == "1" ? true
: false;
}
|
Prosedürümüzü Web Servis tarafında çağıracak Methodumuz da hazır olduğuna göre Artık Web Servis içerisine Web Method'larımızı yazabiliriz
//Kullanıcı varmı yokmu diye kontrol yapan web method
[WebMethod]
public bool
CheckUserInfo(string username, string password)
{
return checkUser(username, password);
}
//Kullanıcı bilgilerinin getiren WebMethod
[WebMethod]
public DataTable
GetUserInfo(string username,string password)
{
//Eğer kullanıcı bilgileri sistemde var ise dön
if (checkUser(username, password))
{
//WebServisten Datatable türünde veri
dönecekseniz mutlaka datatable nesnenize isim vermelisiniz
dtableUserInfo.TableName = "UserInfo";
return dtableUserInfo;
}
else
return null;
}
|
Web Servisi yazma işlemi bittikten sonra F5 tuşu ile
projemizi çalıştırıp gelen tarayıcı ekranındaki linki alıp daha sonraki
aşamalar için saklıyoruz. bende oluşan link (http://localhost:49829/Service1.asmx)
Şimdi yazdığımız Masaüstü uygulaması’na yazdığımız Web
Servisi tanıtıp Web Servis içerisindeki Web Methodlara Erişelim.Bunun için
öncelikle solution Explorerdan Projemize sağ tıklayıp gelen menüden “Add
Service Reference” linkini tıklayalım ve Açılan ekranda Address alanına Web Servisimizin adresini yazıp
Go butonuna basmalıyız ve projemizin Web Servis ve içerdiği WebMethodlarını
bulması için çok kısa bir süre beklemeliyiz.İşlem tamamlanınca İsterseniz Web
Servisinizin NameSpace alanını değiştirebilirsiniz ben değişiklik yapmadan
devam edeceğim.Ok butonuna basılarak Web Servisimizi projemize referans olarak
ekledik.Şimdi bu servis içerisindeki Web Methodları tetikleyelim.(Uygulamanızı
derlemeden önce Webservisin çalışır durumda olduğundan emin olun)
Makalemizin başında tasarladığımız formdaki “Web Servise Bağlan ve Sorgula” butonunun “Click” Event’ına aşağıdaki kodları yazınca Web Servisimiz’deki WebMethodlar vasıtasıyla Merkezdeki Database’de kullanıcı varmı yokmu bilgisini sorgulayıp eğer kullanıcı varsa bilgileri’ni getir ve ekrandaki “Datagrid” nesnesinde göster demiş olduk.
private void
btnConnecttoWebServer_Click(object sender, EventArgs e)
{
ServiceReference1.Service1SoapClient
service = new ServiceReference1.Service1SoapClient();
if (service.CheckUserInfo(txtUsername.Text.Trim(),
txtPassword.Text))
{
//Eğer kullanıcı sistemde tanımlı ise kullanıcı
bilgilerini gride yükle
dgRecord.DataSource = service.GetUserInfo(txtUsername.Text.Trim(),
txtPassword.Text);
}
else
{
MessageBox.Show("Kullanıcı Sistemde Kayıtlı Değil","Kullanıcı Bulunamadı",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);
}
}
|
Yukardaki kodları button nesnemizin click eventınada bağladıktan sonra projemizi "F5" tuşu ile çalıştırıp yaptığımız projeyi test edebiliriz.
Sistemde
tanımlı olmayan murat isminde bir kullanıcı’yı sorguluyoruz.
Sistemde tanımlı olan kullanıcı adı : “bora” parolası :
“123abc” olan bir kullanıcıyı sorguladığımızda bilgilerinin ekrana yüklendiğini
görebilirsiniz.
Burada yaptığımız basit örneği geliştirerek sizde
profesyonel Web Servis’ler yazıp bunları kendi projelerinizde veya sisteminize
erişmek isteyen kullanıcıların hizmetine sunabilirsiniz.Umarım faydalı bir makele olmuştur
herkese başarılar.
Web servis yazma konusunda açıklayıcı bir makale olmuş .Teşekkürler
YanıtlaSilçok güzel bir çalışma olmuş gayet faydalı emeğiniz için teşekkürler.
YanıtlaSilBen teşekkür ederim @fmdemir, faydalı olduysa ne mutlu bana ;)
YanıtlaSilgerçekten basit ve güzel bir anlatım olmuşş
YanıtlaSil* web servis yazmak için kesinlikle bir programlama dili kullanmak gerekiyor mu?
YanıtlaSilPHP vb. gibi web kodu dili öğrenirsem, bunu onunla da yapabilir miyim; yani C# ya da VB.net kodu kullanmadan? Ben programcı değilim işin doğrusu, şu aralar Php üzerinde kendimi geliştirme fırsatım var fazlaca ve bu dilin web sayfası oluşturabilmesi kısmıyla ilgilenmiyorum; bir veritabanına yönelik yaptığı işler ilgilimi çekiyor. Örneğin web servisle bir yerden aldığı bir bilgiyi içeriye düzenli olarak insert-update eden ve tamamen PHP ve pl/sql ile hazırlanmış bir örnek gösterebilir misiniz çalışma alanınıza giriyorsa eğer. Çünkü asp.net üzerinden yaptığınız işlerde gördüğüm kodlar C# kodları, haliyle ben bir masaüstü programlama dili kullanılmış olarak görüyorum.
- excel'den veri alıp DB'ye aktarma konusunda da yine programlama dili kullanılmış, bunda da aynı şart var mı, yani C# vb. bir masaüstü programlama dili kullanmak?
Şöyle bir şeyi yapmak istiyorum mesela:
A sistemindeki(örneğin merkez bankası kur fiyatları) x-y-z olarak tanımlanmış verileri oradaki hedef değerler her güncellendiğinde bizim sistemimize belirtilen yere insert eden bir web servis kodu örneği yapılabilir mi PHP ile; ve bu C# yada VB.net daha pratik mi olur?
Salih merhaba, öncelikle Web servis yazmak için kesinlikle bir programlama dili kullanmak gerekiyor. Bununla ilgili detaylı açıklamayı "Web Servis Nedir Nerelerde Kullanılır ?" isimli makalemde yazmıştım. Web Servis kısacası web üzerinden HTTP protokolü ile hizmet veren program parçalarıdır, dolayısıyla bu program parçarını yazabilmek için bir programlama dili kullanmak gerekiyor. PHP dili ile de uğraşarak bir web servis (SOAP Servis) yazabilirsin. PHP dili ile veritabanı işlemleri'de yapabilirsin. C# tarafında yazdığım kodları ASP.Net yani web tarafında da kullanabilirsin. Excel'den veri alıp DB'ye ekleme konusunda da yaptığım örnek programlama dünyasında ihtiyaç duyulan bir olay sıkça karşılaşılan bir durum. Eğer dinamik olarak excel dosyalarından veri almak istiyorsan bir programlama dili kullanmak en mantıklı yöntem. Fakat excelden sürekli veri alma ihtiyacın yoksa programlama dili kullanmadan çeşitli database araçları yardımı ile DB'ye excel'den veri alabilirsin.
YanıtlaSilÖrneğine gelince ise, herhangi bir sistemden web servis yardımıyla veriler her değiştiğinde bunları alıp veritabanın da saklamak istiyorsan. Kullanacağın programlama dili ile belli sürelerle çalışan bir kod bloğu yazman gerek. Bu kod bloğu her çalıştığında senin verileri çekeceğin Web Servisi çağırıracak ve sende bu değerleri veritabanında saklayabilirsin.
Öncelikle programlama dili olarak PHP kullandığın için sana çok fazla kod noktasında yardımcı olamıyorum, ama programlama dillerinde genel mantık aynıdır, sadece o mantığı kullandığın dil yardımıyla koda dökersin bu noktada benim örneklerimden faydalanabilirsin. PHP ile ilgili yine internette çok fazla döküman ve örnek kod bulabilirsin.
Bu noktada daha yeni olduğun için sana tavsiyem internetten bolca örnek kod ve uygulamaları incelemen olacaktır, sana baya faydalı olacaktır, başarılar.
İlgin ve yardımların için teşekkür ederim. Bu blok çok faydalı konulara dokunduğu için daha ilk çalışmalarda gözle görülür işler çıkarmama yardımcı oldu. Heyecanınızın ve bu bilgilerin paylaşımının devamı dileğiyle..
SilGüzel bir yazı olmuş. Web Servisler ile ilgili bir bilgim yoktu temel olarak artık var.
YanıtlaSilproje dosyasını da paylaşırsan daha zengin bir makale olur bence ;) ellerine sağlık.
YanıtlaSilkendi arkadaşımın yazısına denk gelmek ne güzel, eline sağlık.
YanıtlaSilanlatım çok güzel ellerinize sağlık. ben bir hata alıyorum hata mesajı olarak
YanıtlaSilİlgili sözleşme için birden fazla bitiş noktası yapılandırması bulunduğundan 'ServiceReference1.ServiceSoap' sözleşmesi bitiş noktası yapılandırma bölümü yüklenemedi. Tercih edilen bitiş noktası yapılandırması bölümünü adıyla belirtin.
iyi çalışmalar.
sorunu çözdüm client app. içinde bulunan app.config de endpoint tagındaki conract kısmına tablo adını eklememiş onu ekleyince sorun düzeldi.
YanıtlaSilÇok yararlı bir kaynak oldu benim için,çok teşekkür ederim.
YanıtlaSilEllerinize sağlık...
çok teşekkürler web servis çalışması için
YanıtlaSil