WCF - Hosting del servizio Windows
Il funzionamento dell'hosting del servizio Windows è semplice. Di seguito sono riportati i passaggi con la codifica richiesta e gli screenshot che spiegano il processo in modo semplice.
Step 1- Ora creiamo un servizio WCF. Apri Visual Studio 2008 e fai clic su Nuovo → Progetto e seleziona Libreria di classi dal modello.
Step 2- Aggiungi System.ServiceModel di riferimento al progetto. Questo è l'assembly principale utilizzato per creare il servizio WCF.
Step 3- Successivamente, possiamo creare l'interfaccia ISimpleCalulator. Aggiungi l'attributo Contratto di servizio e operazione come mostrato di seguito:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace WindowsServiceHostedService{
[ServiceContract]
public interfaceISimpleCalculator {
[OperationContract]
int Add(int num1, int num2);
[OperationContract]
int Subtract(int num1, int num2);
[OperationContract]
int Multiply(int num1, int num2);
[OperationContract]
double Divide(int num1, int num2);
}
}
Step 4 - Implementa l'interfaccia ISimpleCalculator come mostrato di seguito -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsServiceHostedService {
Class SimpleCalulator : ISimpleCalculator {
Public int Add(int num1, int num2) {
return num1 + num2;
}
Public int Subtract(int num1, int num2) {
return num1 - num2;
}
Public int Multiply(int num1, int num2) {
return num1 * num2;
}
Public double Divide(int num1, int num2) {
if (num2 != 0)
return num1 / num2;
else
return 0;
}
}
}
Step 5- Costruisci il progetto e ottieni il dll. Ora siamo pronti con il servizio WCF. Vedremo come ospitare il servizio WCF nel servizio Windows.
Note- In questo progetto, si dice che stiamo creando sia il contratto che il servizio (implementazione) nello stesso progetto. Tuttavia è sempre una buona pratica se hai entrambi in progetti diversi.
Step 6 - Apri Visual Studio 2008 e fai clic su Nuovo → Progetto e seleziona Servizio Windows.
Step 7- Aggiungi "WindowsServiceHostedService.dll" come riferimento al progetto. Questa assemblea fungerà da servizio.
Step 8- Il metodo OnStart del servizio può essere utilizzato per scrivere il codice di hosting per WCF. Dobbiamo assicurarci di utilizzare un solo oggetto host del servizio. Il metodo OnStop viene utilizzato per chiudere l'host del servizio. Il codice seguente mostra come ospitare il servizio WCF nel servizio Windows.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace WCFHostedWindowsService {
Partial class WCFHostedWindowsService : ServiceBase {
ServiceHostm_Host;
Public WCFHostedWindowsService() {
InitializeComponent();
}
Private void InitializeComponent() {
thrownewNotImplementedException();
}
protectedoverridevoidOnStart(string[] args) {
if (m_Host != null) {
m_Host.Close();
}
//Create a URI to serve as the base address
UrihttpUrl = newUri("http://localhost:8090/WindowsServiceHostedService/SimpleCalculator");
//Create ServiceHost
m_Host = newServiceHost typeof(WindowsServiceHostedService.SimpleCalulator), httpUrl);
//Add a service endpoint
m_Host.AddServiceEndpoint (typeof(WindowsServiceHostedService.ISimpleCalculator), newWSHttpBinding(), "");
//Enable metadata exchange
ServiceMetadataBehaviorsmb = newServiceMetadataBehavior();
smb.HttpGetEnabled = true;
m_Host.Description.Behaviors.Add(smb);
//Start the Service
m_Host.Open();
}
protectedoverridevoidOnStop() {
if (m_Host != null) {
m_Host.Close();
m_Host = null;
}
}
staticvoid Main() {
ServiceBase[] ServicesToRun;
ServicesToRun = newServiceBase[] {
newWCFHostedWindowsService();
}
ServiceBase.Run(ServicesToRun);
}
}
}
Step 9- Per installare il servizio, abbiamo bisogno della classe Installer per il servizio Windows. Quindi aggiungi una nuova classe Installer al progetto, che viene ereditata dalla classe Installer. Di seguito è riportato il codice che mostra il nome del servizio, il tipo di avvio, ecc. Del servizio.
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;
using System.Configuration.Install;
using System.ComponentModel;
using System.Configuration;
namespace WCFHostedWindowsService {
[RunInstaller(true)]
Public class WinServiceInstaller : Installer {
Private ServiceProcessInstaller process;
Private ServiceInstaller service;
Public WinServiceInstaller() {
process = newServiceProcessInstaller();
process.Account = ServiceAccount.NetworkService;
service = newServiceInstaller();
service.ServiceName = "WCFHostedWindowsService";
service.DisplayName = "WCFHostedWindowsService";
service.Description = "WCF Service Hosted";
service.StartType = ServiceStartMode.Automatic;
Installers.Add(process);
Installers.Add(service);
}
}
}
Step 10- Compilare il progetto per ottenere il file eseguibile WCFHostedWindowsService.exe. Successivamente, è necessario installare il servizio utilizzando il prompt dei comandi di Visual Studio. Quindi apri il prompt dei comandi facendo clic su Start → Tutti i programmi → Microsoft Visual Studio 2008 → Strumenti di Visual Studio → Prompt dei comandi di Visual Studio. Utilizzando l'applicazione install util utility, è possibile installare il servizio come mostrato di seguito.