.Net-Node.js Bağlantısı

Asp.Net Core JavaScript Services serisinde geldiğimiz noktada Asp.Net Core ile Node.js modüllerine nasıl erişebileceğinizi sizlerle paylaşmıştım. Bu faydalı özelliği paylaşmam ardından gelen sorularda, bunun sadece web uygulamalarına has bir özellik olup olmadığının merak edildiğini görüyorum. Bu makalemde bu konuya değinmenin faydalı olacağına inanıyorum.

Öncelikle güzel haberle başlayalım; Asp.Net Core JavaScript Services her ne kadar Asp.Net Core’u hedeflese de Node.js entegrasyon özelliği sadece web uygulamaları ile sınırlı değil.  Masaüstü uygulamaları da benzer şekilde Node.js entegrasyonunu kolaylıkla kurabilir. Örnek üzerinden devam edelim;

Yeoman Asp.Net generator'ü ile bir konsol uygulaması oluşturalım

Projemizi Visual Studio Code ile açtıktan sonra .Net için Node.js hizmetlerini kullanabilmek için öncelikle project.json dosyasında yer alan bağımlılıklar arasına aşağıdaki şekilde Microsoft.AspNetCore.NodeServices’i de eklemeliyiz;

"Microsoft.AspNetCore.NodeServices": "1.0.0-*"

Bu adım ardından Visual Studio Code değişikliği algılayarak restore işlemi isteyecektir;

Visual Studio Code project.json dosyasındaki değişikliği farkedip restore isteyecektir

Alternatif olarak aşağıdaki şekilde komut satırından da restore işlemini yapabilirsiniz;

dotnet restore

Aslına bakarsanız buraya kadar ki adımlar Asp.Net Core entegrasyonundakilerle aynı. Asıl farklılık bundan sonra başlamakta. Masaüstü uygulamalarında Asp.Net Core’da bulunan Dependency Injection mekanizması yok. Dolayısıyla INodeServices arayüzünün bir örneğini farklı bir şekilde oluşturmalıyız. Bunun için aşağıdaki kod parçacığını kullanabilirsiniz;

var nodeHizmetleri = Configuration.CreateNodeServices(new NodeServicesOptions());

Burada Asp.Net Core’daki kullanımından farklı olarak dikkat etmeniz gereken nokta Node servisini oluştururken Node.js modüllerini nerede bulacağını belirtmek. Aksi takdirde aşağıdaki hata mesajını alacaksınız;

Value cannot be null.
Parameter name: path1

Pek çok örnekte node modülleri uygulama ile aynı dizinde olacağından aşağıdaki şekildeki bir kullanım işinizi görecektir;

 
var nodeHizmetleri = Configuration.CreateNodeServices(new NodeServicesOptions{
    ProjectPath = System.IO.Directory.GetCurrentDirectory()
});

ProjectPath değerini istediğiniz farklı bir dizin adresi ile değiştirerek Node.js modüllerinizi istediğiniz bir klasör altında toplayabilirsiniz.

Node modülü olarak önceki makalemde de kullandığım aşağıdaki örnek kodu kullanabilirsiniz;

module.exports = function (callback) {
    var mesaj = "Enterprisecoding, Node.js Modulunden Merhaba!";
    callback(/* hata*/ null, mesaj);
};

Bu kod parçacığını karsilamaMesaji.js adıyla bir dosyaya saklayabilirsiniz.

Son olarak aşağıdaki şekilde oluşturduğunuz Node.js modülünüzü çağırabilirsiniz;

var nodeHizmetleri = Configuration.CreateNodeServices(new NodeServicesOptions{
    ProjectPath = System.IO.Directory.GetCurrentDirectory()
});
var task =  nodeHizmetleri.InvokeAsync<string>("./karsilamaMesaji");

task.Wait();
Console.WriteLine("Node.js Modulunden gelen icerik : " + task.Result);

Kodumuz Node.js modülünü uygulamanın çalıştığı klasörde aradığı için az önce oluşturduğunuz karsilamaMesaji.js dosyasını buraya kopyaladığınıza emin olun…

Uygulamamızı çalıştırdığımızda Node.js modülümüzdeki mesajı çıktıda görebilirsiniz

Basit bir örnek üzerinden konuyu sizlerle paylaşmaya çalıştım. Öte yandan gerçek hayat senaryolarında bundan biraz daha dikkatli olmanız önemli. NodeServices arkaplanda bizim için bir Node.js örneği ayağa kaldırarak çağrıları bu örneğe yönlendirmektedir. Dolayısıyla önemli bir oluşturma maliyeti bulunmakta. Thread-Safe olan bu sınıfın mümkün olduğunda az örneğini oluşturarak, işiniz bittiğinde dispose etmeniz performans açısından önemli bir nokta. Örneğimizi en azından aşağıdaki şekilde using bloğu içerisinde kullanmanız daha doğru bir yaklaşım olacaktır;

using(var nodeHizmetleri = Configuration.CreateNodeServices(new NodeServicesOptions{
    	ProjectPath = System.IO.Directory.GetCurrentDirectory()
	})){
    var task =  nodeHizmetleri.InvokeAsync<string>("./karsilamaMesaji");

    task.Wait();
    Console.WriteLine("Node.js Modulunden gelen icerik : " + task.Result);
}

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir