NSSM – The Non-Sucking Service Manager yazılımı(uygulamayı windows servis olarak çalıştırmak)

http://nssm.cc/download ile herhangi bir exe uygulamasının windows servis gibi çalışmasını sağlayabiliriz.

exe uygulamasını servis olarak kurmak için cmd satırına;

nssm.exe install Kibana

Kurulan servis uygulamasını silmek için;

sc  delete Kibana

komutları çalıştırılabilir. Servis özelliklerinden Startup Type: Automatic yapılırsa bilgisayar açıldığında servis otomatik olark çalışır şekilde olacaktır.

Servis çalışmasını durdurmak için:;

sc queryex Kibana

PID değeri alınır ve cmd satırında aşağıdaki komut satırı çalıştırılır.

taskkill /f /pid PID

WSDL(Web Services Description Language) Nedir ?

WSDL, XML tabanlı web servisleri tanımlamak ve yerini belirtmek için tanımlanmış dildir. WSDL, W3C standardıdır. Bir anlamda dağıtık programlamada kullanılan IDL’e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımlı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:
Types: mesajlarda kullanılacak veri tiplerini belirtir.
Message: İletişimde kullanılacak mesajları tanımlar.
PortType : Web servisinin içerdiği işlemleri (methods) ve ilgili mesajları tanımlar.
Binding : İşlem ve mesajlarda kullanılacak veri formatlarını tanımlar.
Port: Binding ve web adresinden oluşan servis noktasını tanımlar. Web adresi servisin çalıştırılacağı URL’dir.
Service: Kullanılan port’lar kümesidir.

SOAP(Simple Object Access Protocol) Nedir ?

SOAP, XML tabanlı uygulamalarda HTTP üzerinden bilgi değişimine izin veren protokoldür. Basitçe SOAP, Web Servis erişimi için protokoldür.
SOAP, mesaj göndermek için bir formattır.
SOAP, Internet üzerinden iletişim kurmak amacıyla tasarlanmıştır.
SOAP, platformdan ve programlama dilinden bağımsızdır.
SOAP, firewall(güvenlik duvarına) gelebilmeye izin verir.
SOAP W3C standardıdır.

AngularJS Service, Factory, Provider’lar

AngularJS’de sayfa yenilendiğinde veya yönlendirme yapıldığında controller’ların içeriği silinir. Bu nedenle, uygulama genelinde kullanılacak nesnelere erişimi mümkün kılmak için Service’ler kullanılır. Angular’da Service oluşturulması ve kaydedilmesi 3 yolla gerçekleştirilebilir.

1. Factory
Syntax: module.factory( ‘factoryName’, functionName );
factoryName’i injectable argument olarak tanımladığımız zaman, functionName parametresine ait referansın çağırımındaki değer geri döndürülür.
2. Service
Syntax: module.service( ‘serviceName’, functionName );
serviceName’i injectable argument olarak tanımladığımız zaman, functionName parametresine ait bir instance geri döndürülür. new functionName() diyebiliriz.
3. Provider
Syntax: module.provider( ‘providerName’, functionName );
providerName’i injectable argument olarak tanımladığımız zaman, functionName parametresine ait referansın $get methodunun çağırımındaki değer geri döndürülür.
Provider, Service ve Factory’e göre daha karışık görünmesine rağmen onlardan çok daha fazla avantajı vardır. Uygulama henüz başlamadığında, module configuration yapıldığı esnâda Provider’lar kullanılabilir. Aslında Angular Provider’ı tanımakta, Factory ve Service ise Provider’ı sadece miras almaktadır.

Windows Command Processor(Command) ile windows servis kurma/kaldırma

command prompt window(cmd) açılır. C:\WINDOWS\Microsoft.NET\Framework\ altında en güncel hangi framwork yüklü ise bakılır, bende (v4.0.30319)

yani “cd” komutu ile güncel framework dizinine geçilir(Tabi servisin en güncel frameworkte yazıldığını varsayıyorum).

cd "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\"

Daha sonra installutil ile servisimizin yolunu gösterip kurulum işlemini başlatıyoruz.

InstallUtil.exe  "C:\DemoService\DemoWindowsService.exe"

Servisi kaldırmak için ise;

InstallUtil.exe /u  "C:\DemoService\DemoWindowsService.exe"

Windows Servis, 12 saatte bir çalışma mantığı

Önce Servis start methodunda timer nesnemizin zamanını 1saniye olarak ayarlıyoruz. yani servisimiz her bir saniyede tetiklenecektir. Daha sonra objTmr_Elapsed methodunda ise TimeSpan.Compare ile şuanki zamanı ve 12 saati karşılaştırıyoruz, eğer 12saatten büyükse işlem devreye girecektir.

System.Timers.Timer objTmr = new System.Timers.Timer(); 
protected override void OnStart(string[] args) 
{ 
 objTmr.Interval = 1000; 
 objTmr.Enabled = true; 
 objTmr.AutoReset = true; 
 objTmr.Elapsed += new System.Timers.ElapsedEventHandler(objTmr_Elapsed); 
} 
protected override void OnStop() 
{ 
} 
private void objTmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
 TimeSpan objTime = new TimeSpan(12, 0, 0); 
 if (TimeSpan.Compare(DateTime.Now.TimeOfDay, objTime) >= 0) { 
 } 
}

C# ile xml request ve response(Soap)

string WSUrl = "http://sdp.test.com.tr/proxy/external"; //Servis Adresiminiz
string soap = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Header><h:token xmlns:h=\"http://sdp.test.com.tr/mapping/generated\" xmlns=\"http://sdp.test.com.tr/mapping/generated\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
"<sessionId>" + sessionId + "</sessionId></h:token>" +
"</s:Header><s:Body xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><TestInput xmlns=\"http://sdp.test.com.tr/mapping/generated\">" +
"<REFERANS_ID>referansID</REFERANS_ID>" +
"<REQUEST_TIME>2014-12-18 09:11:59.931</REQUEST_TIME>" +
"<DELIVERY_CHANNEL>ECDS</DELIVERY_CHANNEL>" +
"</TestInput></s:Body></s:Envelope>";

WebRequest req = WebRequest.Create(WSUrl);
req.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Headers.Add(String.Format("SOAPAction:{0}", "http://sdp.test.com.tr/services/action/test")); //Action adresiminz
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Method = "POST";
Stream stm = req.GetRequestStream();
using (StreamWriter stmw = new StreamWriter(stm))
{
    stmw.Write(soap);
}

string responseString = "";
using (WebResponse response = req.GetResponse())
{
Stream responseStream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream))
{
    responseString = reader.ReadToEnd();
}
}

#region Debit - Response işlemi

if (!String.IsNullOrEmpty(responseString))
{
    XmlDocument document = new XmlDocument();
    document.LoadXml(responseString);
    XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
    manager.AddNamespace("sdp", "http://sdp.test.com.tr/mapping/generated");
    manager.AddNamespace("so", "so:http://sdp.test.com/mapping/TSO");
    XmlNodeList xnList = document.SelectNodes("//sdp:RefId_DirectDebitOutput", manager);

   foreach (XmlNode xn in xnList)
   {
       var getTSOresult = xn["so:TSOresult"]; //Dönen değerleri alabiliriz.
   }
}

#endregion