Category: Csharp – C#


A Useful Dogmatic Way of WCF Service Development

December 20th, 2011 — 1:20pm

I want to thank Microsoft one more time because they created Windows Foundation Services (WCF).

We must dogmatically use it. :)

I just remembered a day, in one of the training classes…
I said to my teacher “I also want to learn remoting.”
The teacher said “Don’t! There is WCF… ”
I couldn’t see the exact meaning that day.
But today it is shining in front of my eye.
( I am sure it will shine better in the future :p)

While using WCF there is an easy implementation way that I want to share.
With some dependency injection containers you will earn some time …

If you are new to DI and WCF you will earn so much time reading this article.
The dogmatic way uses “Castle Windsor” IOC container.

Here I must specially thank to “Berke Sökhan
for teaching me better software design…
(This thank is bigger than the Microsoft’s Thank :) )

Let’s start the article. A good design is writing your WCF service in 3 layers. Application, Contracts and Services can be your layer’s name endings. Look at this schema first.

This is how my sample works…

It is just a string returning test service…

Contracts Layer has these contracts. An “IMyService” interface for our” DoSomething” Method and a dto class…

Services Layer has MyService class implementing IMyService.

Application Layer is hosting our WCF.

We can install it as windows service or it can host the service working like console application.

This fluent configuration is our WCF configuration… It adds NetTcpBinding, NetNamedPipeBinding endpoints.

To call this service from our web project we need to install it…

This installer uses the NetNamedPipeBinding endpoint to call the DoSomething action…

To use our service from our container. I created a constructor that makes HomeController depending our service.
To understand how this thing works please look into these files. “ControllerInstaller.cs“, “WindsorControllerFactory.cs“, “Global.asax.cs

You can find/download the working solution from this github repo. (github.com/serdarb/DogmaticWcf)

2 comments » | Csharp - C#, WCF

WCF Servis Geliştirmenin Dogmatik Ama Faydalı Bir Yolu

December 20th, 2011 — 12:46pm

Microsoft’a bir kez daha teşekkür etmek istiyorum Windows Foundation Services (WCF) ‘ı yarattıkları için.

WCF’i dogmatik olarak kullanmalıyız :)

Eğitimlerden birinde eğitmene “remoting” de öğrenmek istediğimi söylediğimi hatırlıyorum.
O da bana “Öğrenmene gerek yok çünkü WCF var” demişti.
O gün bunun ne anlama geldiğini anlayamamıştım.
Fakat bugün gözlerimin önünde parlıyor.
(eminim gelecekte daha da parlayacak)

WCF kullanırken, paylaşmak istediğim güzel bir yöntem var.
Bazı IOC container’ların WCF fasilitelerinden faydalanıp biraz zaman kazanabilirsiniz.

DI ve WCF sizin için yeni bir konu ise bu örneği incelemek ve bu makaleyi okumak size çok zaman kazandıracak.
Bu örnekte “Castle Windsor” ioc container’ını ve WCF entegrasyon fasilitesini kullanıyoruz.

Burada Berke Sökhan‘a özellikle teşekkür etmek istiyorum
bana daha iyi yazılım geliştirme konusunda yol gösterdiği için.
(Bu Microsoft’a ettiğim teşekkürden daha büyük bir teşekkürdür :) )

Acaba burda bide Microsoft’a teessüf mü etsem, C#’ın evrimini yavaş tuttuğu için …
Neyse…

WCF servisinizi 3 katmanlı olarak yazmak işi daha anlaşılır hale getirebilir..
Bu katmanlar Uygulama, Kontratlar ve Servisler olarak adlandırılabilir.

Örneğimi bu düşünceden yola çıkarak hazırladım.

Sadece string dönen basit bir test servisi olan örnek aşağıdaki şemadaki gibi çalışıyor …

“Contracts” katmanı “IMyService” interface’ine “MyDto” data kontratını yazdığımız katman.

“Services” katmanı “MyService” isminde “IMyService” interface’ini implemente eden bir class’a sahip.

Application katmanı WCF’i host eden konsol bir uygulama… Bir windows servis olarak kurabiliriz ya da bir konsol uygulaması olarak çalıştırabiliriz.

Aşağıdaki “Castle windsor WCF facility” konfigürasyonu bizim WCF ayarlarımız oluyor… Bu servisin NetTcpBinding ve NetNamedPipeBinding endpoint’leri ile çalışacağını tanımlıyoruz.

Önce server’da tanımlamalar yaptık şimdi de aşağıdaki kod parçacığında servisi client projemizden çağırmak için contaier’ımıza yükleyişimizi görüyoruz.

HomeController constructor’ına servisimizi parametre geçerek servise bağımlı olmasını da sağlamış oluyoruz.
Bu kısımın nasıl çalıştığını daha iyi anlamak için Web projesindeki şu classları inceleyiniz. “ControllerInstaller.cs“, “WindsorControllerFactory.cs“, “Global.asax.cs

Örneği github’dan indirebilir inceleyebilirsiniz. (github.com/serdarb/DogmaticWcf)

Comments Off on WCF Servis Geliştirmenin Dogmatik Ama Faydalı Bir Yolu | Csharp - C#, WCF

Intermec CN3 ile GPS Uygulaması Geliştirmek

September 19th, 2011 — 5:04am

Bu yazı Intermec CN3 Windows Mobile 6.1 yüklü bir cihaza,
GPS koordinatlarını loglayan bir uygulama geliştiririrken
süreçte oluşan duygu ve düşüncelerdir.

İşin en başında şunu söylemek lazım,
Windows Mobile gelişitiriyorsanız Emülatör’e güvenmeden geliştirin.
Cihaz üzerinde test etmek daha sağlıklı olacak.
Biraz zaman kaybettirecek ama bu kayba değer… Hatta belki de zaman kazandıracak diye düşünebiliriz.

Eğer Windows Mobile geliştirmede daha önce tecrübemiz yoksa,
StackOverflow’daki şu soru cevap mutlaka okunmalı…

Mobile Geliştirmek için kurmamız gereken, Windows Mobile SDK
ile gelen örneklerde güzel bir GPS uygulaması örneğin de var.
Muhtemelen şu klasörde olacak. “C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS”

Kullanacağınız cihazın üreticisinin web sayfasını mutlaka inceleyin.
Mesela güzel bir intermec geliştirici forumu varmış …

Üretici sayfasında doğrudan bu derde derman bir, CN3 ile GPS uygulaması geliştirmek dökümanı da mevcut.
Döküman GPS nedir?’e kadar iniyor. Ve oldukça güzel hazırlanmış.

Gene aynı dökümanda GPS’e erişim için
Microsoft GPS Intermediate Driver (GPSID)” kullanımı öneriliyor.
Bunun dışındaki yollar desteklenmiyor ve önerilmiyor.
Windows Mobile SDK ile gelen örnekdeki DLL’i
gönül rahatlığı ile kullanmamız gerektiğini söylüyor yani.
DLL adında Samples! geçirse bile…
using Microsoft.WindowsMobile.Samples.Location;

CN3’ü açıp açık havada biraz beklettikten sonra GPS anca kendine geliyor.
(A-GPS) Asisted GPS’i de olmadığı için uyduları bulması açıldıktan 10-15 dakika sonrayı bulabiliyor.
Kapalı alanlarda da uydulara ulaşmada genel olarak başarısız diye biliriz.

Bu yazıyı tavsiye yazısı olarak hazırladım.
Yaptığım bu uygulamanın açık kaynak hale getirilmiş olan halini,
github profilimden inceleyebilirsiniz.

Ayrıca şu yazılarda ilginizi çekebilir.

Windows Mobile’da Basitçe GPS koordinatlarını almak
Windows Mobile’da WCF Servis çağırmak
Windows Mobile’da Arka Planda Çalışan Uygulama Geliştirmek

Comments Off on Intermec CN3 ile GPS Uygulaması Geliştirmek | Csharp - C#, GIS

Windows Mobile’da WCF Servis Çağırmak

September 19th, 2011 — 5:03am

Çalıştığım projede kaydettiğim konum bilgisini servis ile veritabanına yazmam gerekiyordu.

Mobil projelerde varsayılan olarak WCF Servisi referans olarak gösteremiyoruz.
Neyseki basit web servisi eklerken bir sorun yok :)

Sadece konum bilgilerini göndermek için
WCF taklaları atmamak istedim
ve basit bir asmx metod ile yaptım.

Gerçi Agile Manifesto‘yu imzaladıktan sonra
ve kolaya kaçmak hoşuma gitmese de, inanın haklı sebeplerim vardı :)

Eğer WCF’de diretmek istersek,
Codeplex’de wcf guidance for mobile isimli projede
downloads sayfası hem örnek kodlara hemde 72 sayfalık bir dökümana sahip…

Comments Off on Windows Mobile’da WCF Servis Çağırmak | Csharp - C#

Windows Mobile’da Arka Planda Çalışan Uygulama Geliştirmek

September 19th, 2011 — 5:02am

Windows Mobile’da arka planda çalışmasını istediğiniz bir uygulama geliştirmek için
“SmartDeviceProject” proje tipinden “Console Application” template’ini seçerek geliştirmelisiniz.

Bu şekilde çalışan uygulama sadece Task Manager’da “Process” listesinde görüntülenmektedir.

Mobile Form uygulaması yapıp formu gizleme yolunda gitmek
kullandığınız cihaza göre istediğiniz sonucu alamamanıza sebep verebilir.

Ben CN3 üzerinde form gizlemek ile baya bir zaman kaybettim.
StackOverflow’daki cevap gelmemiş olan sorumu da burada paylaşayım.
Windows Mobile Form Hiding Problem

Gözümden kaçan bildiğiniz bir yol varsa benimle paylaşırsanız sevinirim.

Comments Off on Windows Mobile’da Arka Planda Çalışan Uygulama Geliştirmek | Csharp - C#

Windows Mobile’da Basitçe GPS koordinatlarını almak

September 19th, 2011 — 5:01am

Microsoft’un mobile SDK’daki örneklerindeki
“Microsoft.WindowsMobile.Samples.Location” DLL ile GPS konumunu alabiliriz

Windows Mobile SDK içinde güzel bir Form uygulaması örneğide geliyor…
Şuna benzer bir adreste olacak. “C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS”

Aşağıda basit bir console uygulaması kod örneğini bulabilirsiniz.
Örnek 30 saniye’de bir koordinatları loglamaktadır.

using System.Threading;
using Microsoft.WindowsMobile.Samples.Location;

namespace WindowsMobileGPSLogger
{
    class Program
    {
        static Gps gps = new Gps();
        static GpsPosition position = null;

        static void Main(string[] args)
        {
            if (!gps.Opened)
            {
                gps.Open();
            }

            gps.LocationChanged += new LocationChangedEventHandler(gps_LocationChanged);

            Timer timer30sec = new Timer(TimerWork, null, 0, 30000);
        }

        private static void TimerWork(object state)
        {
            if (position != null)
            {
                string deviceId = "MyDevice";
                string gpsTime = position.TimeValid 
                                       ? position.Time.ToString("dd.MM.yyyy HH:mm:ss") 
                                       : string.Empty;
                string x = position.Longitude.ToString();
                string y = position.Latitude.ToString();

                LogMyPosition(deviceId, gpsTime, x, y);
            }
        }

        private static void LogMyPosition(string deviceId, string gpsTime, string x, string y)
        {
            //todo:Log How Do You Want To Log
        }

        static void gps_LocationChanged(object sender, LocationChangedEventArgs args)
        {
            position = args.Position;
        }
    }
}

1 comment » | Csharp - C#

Page 1 of 41234

Back to top