5. Randevu hizmeti J2EE’in .NET istemcileri
5.1. Bir C# 2008 istemcisi
Artık önceki web hizmetinin kullanılabilir ve aktif olduğunu varsayıyoruz. Bir web hizmeti, farklı dillerde yazılmış istemciler tarafından kullanılabilir. Burada, doktorların listesini görüntülemek için bir C# konsol istemcisi yazmayı öneriyoruz.
![]() |
Öncelikle C# projesini oluşturalım:
![]() |
[1] adlı bir konsol uygulaması oluşturuyoruz. [3]'te bir web hizmetine referans oluşturuyoruz. Bu araç, NetBeans'te kullanılan araca benzer: uzak web hizmetinin yerel bir proxy'sini oluşturur.
![]() |
- [1]'te, web hizmetinin WSDL dosyasının URI'si belirtilir (bkz. paragraf 4.10.2).
- [2]'te, sihirbazdan bu URI'de sunulan web hizmetlerini bulması istenir
- [3]'te bulunan web hizmeti ve [4]'te bu hizmetin sunduğu yöntemler belirtilir.
- [5]'te, C proxy sınıflarının hangi ad alanında oluşturulacağı belirtilir
- [6]'te, C proxy'si oluşturulur.
![]() |
- [1]'te, az önce oluşturduğumuz web referansı yer alır. Üzerine çift tıklayalım.
- [2]'te, çift tıklamayla açılan nesne gezgini.
- [3]'te, oluşturulan C proxy'sinin ad alanı olan [ListeDesMedecins.Ws.RdvMedecins] ad alanını seçin. İlk terim olan [ListeDesMedecins], oluşturulan C# uygulamasının varsayılan ad alanıdır (buna ListeDesMedecins adını vermiştik). İkinci terim olan [Ws.Rdvmedecins], sihirbazda C proxy'sine verdiğimiz ad alanıdır. Sonuç olarak, C proxy'sinin nesneleri [ListeDesMedecins.Ws.RdvMedecins] ad alanındadır.
- [4]'te, oluşturulan C proxy nesneleri
![]() |
- [5]'te, [WsDaoJpaClient], uzak web hizmetinin yöntemlerini yerel olarak uygulayan sınıftır.
- [6]'te, [WsDaoJpaClient] sınıfının yöntemleri bulunur. Burada, örneğin getAllClients yönteminin [7]'te olduğu gibi, uzak web hizmetinin yöntemleri bulunur.
Oluşturulan varlıkların kodunu inceleyelim:
![]() |
Yukarıdaki [1]'te, [client] sınıfının kodunu görüntülemek isteniyor:
...
public partial class client : personne {
}
....
public partial class personne : object, System.ComponentModel.INotifyPropertyChanged {
...
public long id {
...
}
...
}
Yukarıda, çalışmamız için gerekli olan kodu sakladık.
- 2. satır: [client] sınıfı, web hizmetinde olduğu gibi [personne] sınıfından türetilmiştir.
- 8. satır: [personne] sınıfının bir public özelliği
Burada dikkat çeken nokta, oluşturulan kodun C#'ın genel kodlama standartlarına uymamasıdır. Sınıf ve genel özellik adları büyük harfle başlamalıdır.
C# uygulamamıza geri dönelim:
![]() |
[Program.cs] [1] test sınıfıdır. Kodu şöyledir:
using System;
using ListeDesMedecins.Ws.RdvMedecins;
using Client = ListeDesMedecins.Ws.RdvMedecins.client;
namespace ListeDesMedecins {
class Program {
static void Main(string[] args) {
try {
// istemcinin [dao] katmanının örneklenmesi
WsDaoJpaClient dao = new WsDaoJpaClient();
// doktor listesi
foreach (Client client in dao.getAllClients()) {
Console.WriteLine(String.Format("{0} {1} {2}", client.titre, client.prenom, client.nom));
}
} catch (Exception e) {
Console.WriteLine(e);
}
}
}
}
- satırda, C proxy'sinin [Client] sınıfı kullanılıyor; oysa az önce gördüğümüz gibi, bu sınıfın gerçek adı [client]'ti. [client] yerine [Client]'i kullanmamızı sağlayan şey, 3. satırdaki bildirimdir. Bu sayede sınıf adlarının kodlama standardına uymuş oluruz. Yine 12. satırda, [getAllClients] yöntemi kullanılmaktadır çünkü C proxy'sinde adı budur. C# kodlama standardına göre bu yöntemin adı [GetAllClients] olmalıdır.
Yukarıdaki [1] programının çalıştırılması, [2]'te gösterilen sonuçları verir.
5.2. İlk ASP.NET 2008 istemcisi
Şimdi, istemci listesini görüntülemek için ilk ASP.NET / C# istemcisini yazıyoruz.
![]() |
Bu mimaride iki web sunucusu vardır:
- uzak web hizmetini çalıştıran sunucu
- uzak web hizmetinin ASP.NET istemcisini çalıştıran sunucu
ASP.NET istemcisi için web projesini Visual Web Express 2008 SP1 sürümüyle oluşturacağız. Aşağıdaki paragraf, Visual Web Express 2008'in SP1 sürümüne sahip değilseniz aynı projenin nasıl oluşturulacağını göstermektedir.
![]() |
web [1, 2, 3] adlı bir uygulama oluşturulur; bu uygulamanın adı [ListeDesClients1] [4,5,6]'tir. Bu şekilde oluşturulan proje, [7]'te görülebilir.
![]() |
- [5]'te, proje adına sağ tıklayarak bir web hizmeti referansı eklenir.
- [6]'te, web hizmetinin WSDL dosyasının URI'sini belirtin (bkz. paragraf 4.10.2).
- [7]'te, sihirbazdan bu URI'de sunulan web hizmetlerini bulmasını isteriz.
![]() |
- [8]'te, bulunan web hizmeti ve [9]'te bu hizmetin sunduğu yöntemler görüntülenir.
- [10]'te, C proxy sınıflarının hangi ad alanında oluşturulacağı belirtilir
- [11]'te, oluşturulan web hizmetinin referansı gösterilir
[Ws.Rdvmedecins] [12] referansına çift tıklandığında, C proxy'si için oluşturulan sınıflar ve arayüzler görüntülenir:
![]() |
- [1]'te, çift tıklamayla açılan nesne gezgini.
- [2]'te, oluşturulan C proxy'sinin ad alanı olan [ListeDesClients1.Ws.RdvMedecins] ad alanı seçilir. İlk terim olan [ListeDesClients1], oluşturulan ASP.NET uygulamasının varsayılan ad alanıdır (buna ListeDesClients1 adını verdik). İkinci terim olan [Ws.Rdvmedecins], sihirbazda C proxy'sine verdiğimiz ad alanıdır. Sonuç olarak, C proxy nesneleri [ListeDesClients1.Ws.RdvMedecins] ad alanına sahiptir.
- [3]'te, oluşturulan C proxy'sinin nesneleri
![]() |
- [4]'te, [WsDaoJpaService] uzaktaki web hizmetinin yöntemlerini yerel olarak uygulayan sınıftır.
- [5]'te, [WsDaoJpaService] sınıfının yöntemleri bulunur. Burada, örneğin getAllClients yönteminde olduğu gibi, uzak web hizmetinin yöntemleri yer alır.
Oluşturulan varlıkların kodunu inceleyelim:
![]() |
Yukarıdaki [1]'te, [client] sınıfının kodunu görüntülemek isteniyor:
public partial class client : personne {
}
...
public partial class personne {
...
public long id {
...
}
Yukarıda, incelememiz için gerekli olan kodları ayırdık.
- 1. satır: [client] sınıfı, web hizmetinde olduğu gibi [personne] sınıfından türetilmiştir.
- 5. satır: [personne] sınıfı
- 7. satır: [personne] sınıfının bir public özelliği
Burada, 5.1. paragrafta C# istemcisi için daha önce açıklanan kodla benzer bir kod bulunmaktadır.
- Oluşturulan C proxy'sinin ad alanı, oluşturma sihirbazında tanımlanan ve web projesinin kendi ad alanıyla önekli olan ad alanıdır: ListeDesClients1.Ws.RdvMedecins
- Uzak web hizmetinin yöntemlerini yerel olarak uygulayan proxy sınıfının adı WsDaoJpaService'tir.
- Sınıf ve özellik adları küçük harfle başlar
Müşteri listesini görüntüleyen bir [Default.aspx] sayfası yazabiliriz. Sayfa şu şekildedir:
![]() |
No | Tür | Ad | Rol |
MultiView | Görünümler | Görünümler konteyneri | |
Görünüm | VueClients | müşteri listesini içeren görünüm | |
Tekrarlayıcı | RepeaterClients | müşteri listesini madde işaretli liste şeklinde görüntüler | |
Görünüm | VueErreurs | olası bir hatayı gösteren görünüm | |
Etiket | LabelErreur | hata metni |
Bu sayfanın sunum kodu şu şekildedir:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ListeDesClients1._Default" %>
<%@ Import Namespace="ListeDesClients1.Ws.RdvMedecins" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Liste des clients</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:MultiView ID="Vues" runat="server">
<asp:View ID="VueClients" runat="server">
Liste des clients :<br />
<br />
<ul>
<asp:Repeater ID="RepeaterClients" runat="server">
<ItemTemplate>
<li>
<%#(Container.DataItem istemci olarak).soyadı%>,
<%#(Container.DataItem istemci olarak).ad%>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</asp:View>
<asp:View ID="VuesErreurs" runat="server">
L'erreur suivante s'est produite :<br />
<br />
<asp:Label ID="LabelErreur" runat="server"></asp:Label></asp:View>
</asp:MultiView><br />
</div>
</form>
</body>
</html>
- satırda, 20. ve 21. satırlardaki [client] sınıfına erişilebilmesi için web hizmetinin C proxy'sinden [ListeDesClients1.Ws.RdvMedecins] ad alanının içe aktarılması gerektiğine dikkat edilmelidir.
[Default.aspx] sunum sayfasına ait [Default.aspx.cs] kontrol kodu şu şekildedir:
using System;
using ListeDesClients1.Ws.RdvMedecins;
namespace ListeDesClients1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
// uzaktaki [dao] katmanının yerel proxy örneği
WsDaoJpaService dao = new WsDaoJpaService();
// istemci görünümü
Vues.ActiveViewIndex = 0;
// istemci görünümünün başlatılması
RepeaterClients.DataSource = dao.getAllClients();
RepeaterClients.DataBind();
}
catch (Exception ex)
{
// hata görünümü
Vues.ActiveViewIndex = 1;
//hata görünümünün başlatılması
LabelErreur.Text = ex.ToString();
}
}
}
}
- 8. satır: Page_Load yöntemi, sayfanın ilk yüklenmesi sırasında yürütülür. Bu yükleme, sayfayı isteyen her istemci isteğinde gerçekleşir.
- 13. satır: Yerel C proxy'si oluşturulur. Bu C proxy'si, uzak web hizmetinin arayüzünü uygular. Uygulama, bu C proxy'si ile iletişim kuracaktır.
- 15. satır: Yerel C proxy'sinin örneklenmesi sırasında herhangi bir istisna oluşmazsa, "VueClients" adlı görünüm görüntülenmelidir; c.a.d. Sayfanın MultiView "Görünümler" bölümündeki 0 numaralı görünüm.
- 17. satır: répéteur'in veri kaynağı, C proxy'sinin getAllClients yöntemi tarafından sağlanan müşteri listesidir.
- 23. satır: Yerel C proxy'sinin oluşturulmasında bir istisna meydana gelirse, "VueErreurs" adlı görünüm görüntülenmelidir, c.a.d. Sayfanın MultiView "Görünümler" bölümündeki 1 numaralı görünüm.
- 25. satır: İstisna, label "LabelErreur" dosyasında görüntülenir.
Web projesinin çalıştırılması sonucunda şu çıktı elde edilir:
![]() |
5.3. İkinci bir ASP.NET istemcisi 2008
Şimdi, SP1 sürümünden önceki Visual Web Developer Express 2008 sürümünü kullanarak ikinci bir istemci olan ASP.NET / C#'ı yazıyoruz.
![]() |
.NET istemcisinin web projesini oluşturalım:
![]() |
web [1, 2] adlı bir site oluşturuyoruz; bu sitenin adı [ListeDesClients] [3] olacak.
![]() |
- [4] adlı web projesinde
- [5]'e, proje adına sağ tıklayarak, daha önce yapıldığı gibi bir hizmet referansı eklenir.
- [6]'te, uzak web hizmetine referans eklendikten sonraki proje
Daha önce incelenen SP1 web projesinin aksine, nesne gezgini aracılığıyla web hizmetinin istemci nesnelerine erişim sağlanamaz.
Bilmeniz gerekenler:
- Oluşturulan C proxy'sinin ad alanı, oluşturma sihirbazında tanımlanan ad alanıdır: Ws.RdvMedecins
- Uzak web hizmetinin yöntemlerini yerel olarak uygulayan proxy sınıfının adı WsDaoJpaClient'tir.
- Sınıf ve özellik adları küçük harfle başlar
Müşteri listesini görüntüleyen bir [Default.aspx] sayfası yazabiliriz. Sayfa şu şekildedir:
![]() |
No | Tür | Ad | Rol |
MultiView | Görünümler | Görünümler konteyneri | |
Görünüm | VueClients | müşteri listesini içeren görünüm | |
Tekrarlayıcı | RepeaterClients | müşteri listesini madde işaretli liste şeklinde görüntüler | |
Görünüm | VueErreurs | olası bir hatayı gösteren görünüm | |
Etiket | LabelErreur | hata metni |
Bu sayfanın sunum kodu şu şekildedir:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="Ws.RdvMedecins" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Liste des clients</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:MultiView ID="Vues" runat="server">
<asp:View ID="VueClients" runat="server">
Liste des clients :<br />
<br />
<ul>
<asp:Repeater ID="RepeaterClients" runat="server">
<ItemTemplate>
<li>
<%#(Container.DataItem müşteri olarak).soyadı%>, <%#(Container.DataItem, müşteri olarak).ad%>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</asp:View>
<asp:View ID="VuesErreurs" runat="server">
L'erreur suivante s'est produite :<br />
<br />
<asp:Label ID="LabelErreur" runat="server"></asp:Label></asp:View>
</asp:MultiView><br />
</div>
</form>
</body>
</html>
- satırda, 19. satırdaki [client] sınıfına erişilebilmesi için web hizmetinin C proxy'sinden [Ws.RdvMedecins] ad alanının içe aktarılması gerektiğine dikkat edilmelidir.
[Default.aspx] sunum sayfasına ait [Default.aspx.cs] kontrol kodu şöyledir:
using System;
using Ws.RdvMedecins;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{
// uzaktaki [dao] katmanının yerel proxy örneği
WsDaoJpaClient dao = new WsDaoJpaClient();
// istemci görünümü
Vues.ActiveViewIndex = 0;
// istemci görünümünün başlatılması
RepeaterClients.DataSource = dao.getAllClients();
RepeaterClients.DataBind();
}
catch (Exception ex)
{
// hata görünümü
Vues.ActiveViewIndex = 1;
//hata görünümünün başlatılması
LabelErreur.Text = ex.ToString();
}
}
}
Bu kod, önceki sürümdekine benzerdir. Web projesinin çalıştırılması sonucunda şu çıktı elde edilir:




















