Saya baru bekerja dengan Layanan Windows. Meskipun saya telah belajar untuk membuat Layanan Windows di VS2010 saya ingin tahu beberapa cara praktis di mana layanan windows dapat digunakan?
Saya mencoba Googling dengan mengingat konteks saat ini hanya untuk menemukan lebih banyak tutorial tentang cara membuat Layanan Windows.
EDIT pada Penawaran Bounty:
Semua jawabannya bagus tapi saya mencari contoh yang lebih praktis tentang layanan windows dan implikasinya? Ini akan membantu pengembang tahu kapan waktu yang tepat untuk menggunakannya dengan studi kasus.
Jawaban:
Layanan berjalan di latar belakang, bahkan jika tidak ada yang masuk ke mesin. Apa pun yang dapat Anda bayangkan ingin lakukan tanpa mengandalkan seseorang untuk memulai aplikasi dan mengklik tombol adalah kandidat yang baik untuk suatu layanan. Misalnya, memonitor folder dan kapan pun file ditulis untuknya, proseslah dengan cara tertentu. "Server" apa pun yang dapat Anda pikirkan - server web, server ftp, server mail - adalah layanan, dan begitu juga banyak proses latar belakang yang mungkin tidak sering Anda pikirkan.
Beberapa hal yang pernah ditulis sebagai layanan (file cadangan jam 2 pagi, kirim email pengingat jam 3 pagi dll) mungkin lebih baik dilakukan hari ini sebagai tugas yang dijadwalkan, yang memiliki fleksibilitas luar biasa pada Windows 7 dan lebih tinggi, tetapi jika pengembang tidak pernah mempelajarinya, atau sistem harus mendukung XP, Anda juga akan menemukan layanan melakukan tugas-tugas semacam itu.
sumber
Layanan pada Windows pada dasarnya adalah program yang berjalan tanpa GUI. Server web (seperti apache), server basis data (seperti server mysql & sql), mesin anti-virus, dan server aplikasi / 'middleware' adalah contoh praktis aplikasi yang sering dijalankan sebagai layanan. Mungkin ada klien GUI yang memungkinkan Anda berinteraksi dengan layanan, tetapi layanan itu sendiri tidak memilikinya. Itu hanya berjalan 'di latar belakang', melakukan hal itu. Selain itu, karena layanan dijalankan dengan hak pengguna yang ditetapkan untuk mereka, mereka dapat berjalan sebagai pengguna yang ditugaskanapakah pengguna benar-benar masuk ke mesin. Jadi server database akan memiliki hak akses yang sama terlepas dari orang yang masuk ke mesin pada saat itu, jika ada. Jadi, Anda dapat melihat mengapa itu penting - Anda tidak ingin harus membuat pengguna tetap masuk untuk menjaga server web tetap berjalan, misalnya.
Mereka adalah setara Windows (dalam cara paling praktis) untuk Daemon di * nix.
sumber
Layanan
Program, rutin, atau proses yang menjalankan fungsi sistem tertentu untuk mendukung program lain, terutama pada level rendah (dekat dengan perangkat keras). Ketika layanan disediakan melalui jaringan, mereka dapat dipublikasikan dalam Active Directory, memfasilitasi administrasi dan penggunaan layanan-sentris.
Sesuai dengan definisi layanan, Layanan Jendela dan jenis layanan lainnya melakukan banyak fungsi. Dalam konteks ini mesin pencari adalah teman Anda .
Layanan Windows biasanya digunakan ketika aplikasi harus terus berjalan. Anda harus membuat Layanan Windows untuk menjalankan kode di latar belakang, tanpa interaksi pengguna .
Layanan Windows akan berjalan bahkan jika tidak ada yang masuk. Layanan Windows dapat mulai berjalan segera setelah mesin dinyalakan , yang menjadikannya ideal untuk berjalan sebagai server, misalnya server http. Tidak ada yang diperlukan untuk masuk.
Misalnya jika mereka perlu:
Saya akan menggunakan layanan karena alasan berikut:
Anda mendapatkan beberapa perintah manajemen bawaan gratis
o Mulai
o Berhenti
o Jeda
o Lanjutkan
Anda dapat menangani acara server seperti shutdown.
Tautan dengan informasi tambahan tentang layanan ini:
Di Asp.net - // TODONT: Gunakan Layanan Windows hanya untuk menjalankan proses yang terjadwal
Apa gunanya Layanan WIndows
sumber
Program interaktif, seperti winform atau WPF, adalah sesuatu yang Anda inginkan untuk dibuka, berinteraksi, dan ditutup oleh pengguna. Tugas terjadwal adalah sesuatu yang ingin Anda jalankan di latar belakang sebagai waktu tertentu - mungkin hanya memulai, melakukan sesuatu, dan berhenti. Sebuah Windows Service adalah sesuatu yang Anda ingin menjalankan semua waktu di latar belakang.
Beberapa keuntungan dari Layanan Windows adalah bahwa ia berjalan tidak peduli pengguna mana yang masuk (atau bahkan jika tidak ada pengguna yang masuk) dan dapat diatur untuk mulai berjalan segera setelah komputer dinyalakan, yang dapat sangat berguna jika sistem di-boot ulang.
Saya biasanya menggunakan layanan ketika saya harus memonitor sesuatu seperti folder atau inbox email.
sumber
Karena Anda menambahkan catatan tentang contoh-contoh praktis untuk pertanyaan Anda, saya akan memberikan beberapa contoh layanan yang telah saya tulis untuk aplikasi perusahaan (Anda tidak mengatakan jika Anda seorang programmer aplikasi perusahaan tetapi dugaan saya adalah kebanyakan programmer C # VS2010 adalah) . Saya pikir Anda mencari ide tentang apa yang mungkin ditulis oleh pengembang yang tidak bekerja untuk Microsoft.
Layanan monitor detak jantung yang memeriksa apakah program lain masih berjalan (ini mungkin bekerja sebagai tugas yang dijadwalkan juga, tetapi diimplementasikan sebagai layanan).
Layanan penulisan laporan yang berfungsi melalui antrian permintaan laporan, menjalankan laporan, dan mengirimkannya ke printer yang berbeda tergantung pada printer apa yang sibuk. Ini membantu membongkar cukup banyak pekerjaan dari aplikasi lawas dan memungkinkan laporan berjalan untuk dibagikan oleh beberapa kotak murah yang menjalankan layanan.
Itu diimplementasikan sebagai layanan sehingga akan berjalan terus menerus, mulai secara otomatis pada reboot, dan dapat menggunakan antarmuka layanan windows standar untuk memulai, berhenti, berhenti, dll. Juga, jika itu adalah tugas yang dijadwalkan, perlu memulai mendapatkan data dari program lain atau sumber persisten (antrian, file, database) daripada tersedia untuk panggilan program lain (soket, pipa).
Bagian server dari aplikasi klien / server itu juga diimplementasikan sebagai layanan sehingga akan restart pada reboot, dll. Ada proyek lain dengan .exe yang menjalankan program yang sama bukan sebagai layanan, untuk membuatnya lebih mudah untuk debug pada mesin pengembangan.
Saya harap itu membantu. Namun, jawaban lainnya adalah jawaban umum yang lebih baik, terutama gagasan bahwa tugas terjadwal mungkin lebih mudah untuk ditulis dan dikelola untuk sebagian besar tujuan sekarang.
sumber
Ada banyak kegunaan praktis untuk suatu layanan. Salah satu penggunaan praktis utama adalah interaksi antara UI dan program layanan (atau daemon dalam unix), yang, dalam hal ini, perbedaan antara klien dan server. Server menerima permintaan, memproses permintaan, dan biasanya mengirim balasan. Dengan kata lain, ini melayani permintaan. Pikirkan tentang SQLSERVER, IIS, atau telnet. Seorang klien, biasanya menggunakan server dengan mengirimkan permintaan ke server dan kemudian menampilkan atau memproses balasan. yaitu aplikasi entri data, aplikasi web ... Server hampir selalu diinstal sebagai layanan di windows (atau daemon di unix) dan klien biasanya hanya aplikasi normal dengan gui. Ada banyak kegunaan layanan yang lebih kompleks, tetapi ini adalah yang mungkin paling sering Anda gunakan.
Sebagai contoh: Saat ini saya sedang mengerjakan server video SIP / H323. Ia menerima permintaan dari aplikasi menggunakan SDK yang saya tulis, memprosesnya, dan membalas kembali. Aplikasi server video dipasang sebagai daemon pada mesin linux embeded (itu akan menjadi layanan pada mesin Windows embeded, tetapi siapa yang menggunakan Windows untuk embeded anyways) dan aplikasi apa pun yang menggunakan SDK akan dianggap sebagai klien.
Tentu saja, Anda dapat menulis aplikasi semacam itu dan tidak menjadikannya layanan. Anda masih bisa membuatnya mulai saat menjalankan Windows dan menjalankannya di latar belakang. Namun, ini melibatkan beberapa entri registri dan beberapa finagling dalam kode Anda - jauh lebih mudah untuk menggunakan c api daripada dalam sesuatu seperti .NET. Di sisi lain, Microsoft telah membuat ini lebih mudah dengan menciptakan layanan dan memungkinkan kami untuk mendaftarkannya dengan OS. Jauh lebih sederhana dan lebih mudah diimplementasikan daripada melakukannya secara manual.
sumber
Contoh program kandidat:
Sistem yang harus memantau sumber daya / aplikasi lain dan mengirim laporan (aktivitas pengguna, jenis lalu lintas file tertentu, pemberitahuan kelakuan buruk aplikasi)
Sistem yang menawarkan layanan ke aplikasi lokal lainnya (terjemahan, konversi file, pengiriman pesan antar-sistem)
Perangkat lunak anti-virus.
Saya pikir ini adalah contoh besar yang tidak dapat dengan mudah dilakukan menggunakan tugas yang dijadwalkan.
sumber
Contoh favorit saya menggunakan layanan:
sumber
Berikut adalah contoh penggunaan konsep layanan dengan kode nyata (lihat di bawah).
Apa yang dilakukannya adalah mengonfigurasi bus layanan yang menghabiskan antrian dan mendengarkan pesan dari server web dan GUI klien.
Ketika menerima pesan itu tidak apa logika domain waran, itu menyimpan peristiwa ke disk dan mempublikasikan peristiwa itu ke broker pesan.
Sebagian besar aplikasi yang lebih besar yang secara longgar digabungkan mengimplementasikan semacam arsitektur "pekerja" seperti hal di bawah ini.
Proyek Documently adalah proyek sampel yang telah kami buat untuk orang-orang seperti Anda untuk belajar arsitektur terdistribusi. Anda dapat mengajukan pertanyaan langsung kepada saya di proyek, atau bercabang dan menerapkan beberapa fitur untuk belajar dari dan kemudian mengirimkan permintaan tarik (dan mendapatkan komentar kode).
https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :
sumber
Beberapa waktu lalu tim saya menerapkan 3 layanan windows di bank di Brasil, seperti di bawah ini:
Antarmuka antara sistem: Kami memiliki aplikasi front-office yang bertanggung jawab atas pemesanan perdagangan di pasar saham, dan aplikasi back-office, yang bertanggung jawab untuk akuntansi dan menghitung biaya perdagangan. Awalnya, komunikasi antar sistem dibuat langsung pada SQL Server, tetapi terlalu banyak masalah penguncian dan penyimpanan membuat sistem menderita dari kinerja yang buruk. Sebuah layanan diimplementasikan untuk terhubung ke database depan dan belakang dan melakukan pembacaan / penulisan yang tepat menggunakan beberapa jenis strategi retensi (alih-alih menulis setiap perdagangan tunggal pada SQL Server, kami menyimpan data untuk beberapa perluasan, katakanlah 1000 perdagangan, dan melakukan penyisipan massal, yang 40x lebih cepat dari solusi asli, dan tidak mengunci banyak tabel yang terlibat untuk waktu yang lama).
Antrian Pesan: Seiring dengan solusi sebelumnya, kami menulis penangan antrian pesan khusus, sehingga beberapa prosedur pemrosesan batch dapat berjalan secara tidak sinkron. Itu terintegrasi dengan MSMQ dan IBM-MQSeries.
Sentralisasi layanan bisnis: Beberapa aplikasi pengguna memerlukan data umum seperti harga saham, misalnya, jadi kami menulis layanan khusus yang bertanggung jawab untuk menerima "permintaan harga" dan mengirimkan kembali informasi harga.
Salah satu aspek yang mengarahkan kami untuk menulis layanan, alih-alih "robot", adalah bahwa layanan dapat berjalan sebagai pengguna tertentu (seperti seseorang telah ditunjukkan pada utas ini), dan dapat dimulai secara otomatis ketika mesin dinyalakan.
Layanan juga tidak perlu menjalankan desktop atau layanan manajemen jendela. Mereka dapat berjalan di latar belakang (well, mereka harus berlari di latar belakang).
Dan, jika Anda seperti beberapa rekan saya yang tidak suka menulis antarmuka pengguna, layanan adalah tantangan teknologi yang hebat, karena biasanya mereka tidak boleh gagal. Jadi sangat menyenangkan untuk menulis layanan. :)
sumber
Jika Anda mendesain aplikasi desktop Windows yang perlu dijalankan sebagai pengguna standar tetapi kadang-kadang perlu melakukan tugas yang memerlukan hak admin Anda dapat menggunakan layanan.
Installer Anda menginstal layanan dengan izin yang diperlukan, aplikasi desktop Anda memanggil ke layanan ketika perlu melakukan tugas dengan hak admin.
Ada implikasi keamanan terhadap pendekatan ini yang berada di luar cakupan jawaban ini.
sumber
Untuk programmer, alasan utama untuk menggunakan layanan adalah:
Apa pun yang Anda tulis yang harus sesuai dengan di atas harus dijalankan sebagai Layanan Windows.
sumber
Layanan paling berguna yang saya tulis, dari perspektif pengguna akhir:
* Pengguna mencetak faktur UGLY pada printer dot-matrix dengan driver cetak RAW.
* Pengguna menginginkan faktur CUKUP dengan logo, grafik garis halus.
* Tidak ada akses ke kode lawas.
Layanan akan:
* Memantau (beberapa) folder printer untuk pekerjaan cetak.
* Buat PDF faktur.
* PDF akan "mendasari" gambar faktur kosong yang bagus
* Overlay teks mentah
* Cari meta data, berdasarkan folder yang digunakan (IE: printer sedang digunakan)
Maka metadata akan:
* Hasilkan PDF
* dan / atau cetak PDF
* dan / atau file PDF ke folder tujuan akhir
* dan / atau hapus PDF
* dan / atau mengirim email faktur PDF ke pelanggan
Dalam hal ini, ia menangani ghost-script, PLC dan mesin PDF. Sudah berjalan sangat bersih selama bertahun-tahun. Sertakan file log !!!
sumber