Windows Servisi Olarak WCF Web Servisi Yayınlama
C#'da WCF Servislerini Windows Servisi olarak yayınlamak için izlenecek adımlar:
1- Visual Studio açılır, platforumun sol tarafındaki Visual C# sekmesi altından WCF'ye tıklanarak WCF Service Library seçilerek yeni bir WCF kütüphanesi oluşturulur. Açılan yeni WCF Library projesi arayüzünün sağ tarafındaki Solution Explorer panelinde oluşturmuş olduğumuz yeni wcf servisi adı altında Service1.cs ve IService1.cs classlarının oluşmuş olduğu görülecektir. Oluşturmuş olduğumuz projeye default olarak eklenen bu örnek class'lar istenirse silinir veya editlenerek yazmak istediğimiz kendi kodumuzu yazabiliriz. Projeyle örnek olarak gelen classları sildiğimiz taktirde kendi classlarımızı oluşturmak için proje adı üzerine sağ tıklanarak Add New Item -> Class diyerek kendi classımızı oluşturabiliriz. Aynı şekilde oluşturduğumuz classın implementi için örnekteki gibi Interface class oluşturabiliriz. Oluşturduğumuz Interface classın kütüphane tanımlama bölümüne using System.ServiceModel; kütüphanesini eklememiz gerekir. Public Interface IService classın üst kısmına [ServiceContract] kodunu eklememiz gerekir. Ayrıca classta tanımlayacağımız her fonksiyon için tanımladığımız fonksiyonun üst kısmına [OperationContract] kodunu eklememiz gerekir. Daha sonra interface classı normal class üzerinde :IService1 şeklinde implemente ederek gerekli kodu yazarız. Tanımlanan classı daha sonra windows service'den çağıracağımız için public yapmamız gerekir.
2- Oluşturmuş olduğumuz projeye Add New Project diyerek sol paneldeki Visual C# sekmesi altından Windows seçilerek Windows Service projesi oluşturulur. Oluşturulan projenin Solution Explorer paneli altındaki App.config sağ tıklanarak Edit WCF Configuration tıklanır. Açılan pencerede Services bölümünde Create a New Service -> Service Type browse'tan oluşturmuş olduğumuz projenin klasörü açılır: -> Bin->Debug->Service.dll seçtikten sonra Next diyerek bir sonraki aşamalara geçilir. Communication Mode aşamasında HTTP seçili bırakılır, bir sonraki adımda Basic Web Services İnteroperability seçili bırakılır, address of your endpoint adımında http:// yazan yere bir endpoint adı sallanır. Tüm bu işlemler tamamlandıktan sonra Configuration penceresinin sol tarafında yer alan Host çift tıklanarak ardından New buttonuna tıklanır ve Base address PC'mizin ip adresi http://192....:8080 numarası şeklinde girilir. Not: port numarası değiştirilebilir. IP adresini öğrenmek için command promt penceresinde ipconfig yazmak yeterlidir.
Bu işlemi de bitirdikten sonra Configuration panelinde Advanced sekmesi seçilir. Bir alt sekmedeki Service Behaviors tıklanır, ardından gelen panelin Add butonundan serviceMetadata seçilir, ardından new behavior yerine behavior ismi verilerek bu işlem de tamamlanmış olur. Oluşturulmuş olan yeni behavior sekmesine tıklanarak gelen serviceMetadata penceresinden HttpGetEnabled özelliği true yapılır. Daha sonra oluşturulmuş olan bu behavior özellikleri Services sekmesi altındaki oluşturmuş olduğumuz webservisin adına tıklanarak behaviorConfiguration olarak seçilir.
3- Solution Explorer penceresinden Add Reference tıklayarak yapmış olduğumuz WebService.dll dosyasını ve Assemblies->Framework tıklayarak System.ServiceModel kütüphanelerini import ediyoruz.
4- Windows Serivce'nin Service1.cs tıklayarak açılan Design panelde boşlukta sağ tıklayarak Add Installer tıklanır. Böylece oluşturmuş olduğumuz serviceInstaller1 sekmesi üzerine sağ tıklanarak Properties'ten panelin sağ tarafta çıkan Service Name ayarlanır, Start Type Manual olarak bırakılır. serviceProcessInstaller1 sekmesine sağ tıklanarak sağ tarafta çıkan Account ayarı LocalSystem olarak ayarlanır. Ardından Service1.cs nin click here to switch to code view tıklanarak windows servisi başlatma ve kapama için gereken kodlar yazılır:
ilk önce using System.ServiceModel; tanımlanır, ardından aşağıdaki gibi wcf açma kapama komutları yazılır.
ServiceHost sh;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
sh = new ServiceHost(typeof(VeriTransfer.VeriGonder));//Referans olarak göstermek için import ettiğimiz wcf servis dosyasını buraya çağırıyoruz. Burada görüldüğü gibi benim WCF web servisimin adı VeriTransfer 'dir.
sh.Open();
}
protected override void OnStop()
{
sh.Close();
}
5- Şuana kadar hazırlamış olduğumuz windows service'nin pc'ye yüklenmesi, Installutil.exe ve windows servisi uygulamamızın kaynak dosyası dizini kullanılarak yapılır. Bunun için command prompt açılır ve kendi windows servis klasörünüzün yolunu bu örneğe editleyerek şu şekilde komut yazılır:
Install :
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" "C:\Users\Surec\Documents\Visual Studio 2013\Projects\VeriTransfer\WindowsServiceWCF\bin\Debug\WindowsServiceWCF.exe"
Uninstall :
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" -u "C:\Users\Surec\Documents\Visual Studio 2013\Projects\VeriTransfer\WindowsServiceWCF\bin\Debug\WindowsServiceWCF.exe"
tüm bu işlemleri yukarıdaki 5 adımı da sorunsuz şekilde yaptığımız taktirde Görev Yöenticisi açarak ->Hizmetler sekmesini tıkladığımızda yapmış olduğumuz windows servisini diğer servisler arasında görebileceğiz.
Muhtemel Hatalar :
This service on local computer started and then stopped. some services stop automatically if then are not in use by other servces or programs
yukarıdaki hatayı aldığımız taktirde öncelikle servisimizin kodlarını kontrol etmemiz gerekiyor öyle ki:
- ismini değiştirmiş olduğumuz classların değiştiştirilmesi gereken veya class ile aynı isme sahip olması gereken yerleri incelemek gerekir.
- daha sonra hem wcf library'nin olduğu App.Config dosyası incelenmeli hem de windows servisin App.Config dosyası incelenmeli yukarıdaki App.Config ayarları iki taraf için de Edit WCF Configuration üzerinden eksiksiz yapılmalıdı en son ayarlar ile proje Build edilmelidir.
Hiç yorum yok:
Yorum Gönder