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

Asp.Net Core JavaScript Services serisine kaldığımız yerden devam ediyoruz. Sırada, giriş makalesinde de değindiğim NPM paketlerinin .Net içerisinden çağırılmasında. Asp.Net Core JavaScript Services ile birlikte iyi bir .Net-Node.js bağlantısına sahip olduk. Bu bağlantı sayesinde herhangi bir Node.js kodunu oldukça kolay şekilde .Net içerisinde çağırabilecek esnekliğe sahip olduk.

Bu entegrasyonu anlatmanın en kolay yolu örnek bir kod üzerinden gitmek olacaktır. Bu sebeple boş bir Asp.Net Core uygulaması oluşturalım;

komut satırından Asp.Net Yeoman generator'ü yardımıyla boş bir web uygulaması oluşturalım

Ardından da paketlerimizi yükleyelim;

"dotnet restore" komutu ile paketlerimizi yükleyelim

Asp.Net Core 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-*"

Microsoft.AspNetCore.NodeServices’i kullanabilmek için öncelikle project.json dosyasına bağımlılığını eklemelisiniz

Bağımlılığı ekledikten sonra ilgili bileşenlerin yüklenebilmesi için komut satırından yeniden aşağıdaki komutu çalıştırmalısınız;

dotnet restore

Projemizi Visual Studio Code ile yeniden açtıktan sonra Startup.cs dosyasında yer alan ConfigureServices fonksiyonuna aşağıdaki şekilde Node.js hizmetlerinin eklenmesini sağlayabiliriz;

public void ConfigureServices(IServiceCollection services)
{
    services.AddNodeServices();
}

Bu noktada Visual Studio Code, AddNodeServices fonksiyonunu bulamadığına dair bir hata mesajı verecektir. Bu hatayı düzeltmek için aşağıdaki şekilde using cümleciğini eklemeniz gerekli;

using Microsoft.AspNetCore.NodeServices;

Node hizmetlerini kullanabilmek için Startup.cs dosyasına eklemeler yapmamız gerekli

Bu adımlar ardından Asp.Net Core’un Dependency Injection sistemi NodeServices’i tanıyacak ve gerektiğinde bu bağımlılığı kodunuza enjekte edebilecektir. Dolayısıyla herhangi bir MVC action’ı içerisinden INodeServices arayüzünün bir örneğine ulaşabilirsiniz.

Örnek olması adına aşağıdaki şekilde basit bir string ifadeyi dönen bir Node.js modülü hazırlayarak denemelerimizi yapabiliriz;

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

Bu kodu uygulamamızın ana klasöründe karsilamaMesaji.js adlı bir dosya içerisine kaydedelim. Daha sonra da başta oluşturduğumuz boş web uygulamamızın Startup.cs dosyası içerisindeki Configure fonksiyonunda aşağıdaki şekilde değişiklik yapalım;

 
INodeServices nodeServices  = app.ApplicationServices.GetService<INodeServices>();
var sonuc = await nodeServices.InvokeAsync<string>("./karsilamaMesaji");
await context.Response.WriteAsync("Node.js Modulunden gelen icerik : " + sonuc);

Startup.cs içerisinde değişiklik yaparak NodeServies'i kullanarak node.js modülünü çağırabilirsiniz

Uygulamamızı çalıştırdığımızda bize aşağıdaki çıktıyı verecektir;

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

Bu örneğimiz herhangi bir parametre göndermiyor olmasına karşın, isterseniz Node.js modülünüze parametre ile değer gönderebilmeniz de mümkün. Burada dikkat etmeniz gereken en önemli nokta, parametre türlerinin json’a serilize edilebilir olmasıdır. Node.js modülünüzde bir hata alınması durumunda InvokeAsync fonksiyonu da bu hatayı fırlatacaktır.

Örneğimize dikkat edecek olursanız Asp.Net Core Dependency Injection makanizmasına doğrudan bir çağrı yaparak INodeServices arayüzünün bir örneğini aldık. Örneği basit tutmak adına tercih ettiğim bu yöntem yerine, gerçek hayatta aşağıdaki kullanıma benzer bir kullanım ile action fonksiyonlarınızda bu arayüze ait bir örneği kolaylıkla edinebilirsiniz;

public async Task<IActionResult> HerhangiBirAksiyon([FromServices] INodeServices nodeServices)
{
    var sonuc= await nodeServices.InvokeAsync<int>("./karsilamaMesaji");
    return Content("Node.js Modulunden gelen icerik : " + sonuc);
}

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