WCF是一款由微软公司研发的.NET Framework 3.5重要组成部件。它的功能优势突出,比如在兼容性,安全性方面尤其突出。在windows服务中寄宿WCF服务,需要继承ServiceBase,此外,还须要继承Installer以安装服务.以下为具体实现步骤:
寄宿WCF服务步骤1.创建文件winservice.cs,输入代码
- namespace windowswcfservice
- {
- using System.ServiceProcess;
- using System.ServiceModel;
- using System.Configuration.Install;
- using System.Configuration;
- using System.ComponentModel;
- [ServiceContract(Namespace="http://mysample")]
- public interface ICalculator
- {
- [OperationContract]
- double Add(double n1, double n2);
- [OperationContract]
- double Subtract(double n1, double n2);
- [OperationContract]
- double Multiply(double n1, double n2);
- [OperationContract]
- double Divide(double n1, double n2);
- }
- public class CalculatorService : ICalculator
- {
- public double Add(double n1, double n2)
- {
- return n1 + n2;
- }
- public double Subtract(double n1, double n2)
- {
- return n1 - n2;
- }
- public double Multiply(double n1, double n2)
- {
- return n1 * n2;
- }
- public double Divide(double n1, double n2)
- {
- return n1 / n2;
- }
- }
- [RunInstaller(true)]
- public class ProjectInstaller : Installer
- {
- private ServiceProcessInstaller process;
- private ServiceInstaller service;
- public ProjectInstaller()
- {
- process = new ServiceProcessInstaller();
- process.Account = ServiceAccount.LocalSystem;
- service = new ServiceInstaller();
- service.ServiceName = "WCFWindowsServiceSample";
- Installers.Add(process);
- Installers.Add(service);
- }
- }
- public class WindowsCalculatorService : ServiceBase
- {
- public ServiceHost serviceHost = null;
- public static void Main()
- {
- ServiceBase.Run(new WindowsCalculatorService());
- }
- protected override void OnStart(string[] args)
- {
- if (serviceHost != null)
- {
- serviceHost.Close();
- }
- try
- {
- serviceHost = new ServiceHost(typeof(CalculatorService));
- serviceHost.Open();
- }
- catch(System.Exception err)
- {
- System.Diagnostics.EventLog.WriteEntry("Application", err.Message);
- }
- }
- protected override void OnStop()
- {
- if (serviceHost != null)
- {
- serviceHost.Close();
- serviceHost = null;
- }
- }
- }
- }
寄宿WCF服务步骤2.用csc编译文件winservice.cs
csc /t:exe winservice.cs /r:"C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication
Foundation\System.ServiceModel.dll" /r:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.ServiceProcess.dll /r:System.Configuration.Install.dll
寄宿WCF服务步骤3.创建winservice.exe.config,内容如下:
- < ?xml version="1.0"?>
- < configuration>
- < system.serviceModel>
- < services>
- < service name="windowswcfservice.CalculatorService"
behaviorConfiguration="Metadata" >- < host>
- < baseAddresses>
- < add baseAddress="http://localhost:8000/service"/>
- < /baseAddresses>
- < /host>
- < endpoint address="*" binding="wsHttpBinding"
contract="windowswcfservice.ICalculator" />- < endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange"/>- < /service>
- < /services>
- < behaviors>
- < serviceBehaviors>
- < behavior name="Metadata">
- < serviceMetadata httpGetEnabled="true" />
- < /behavior>
- < /serviceBehaviors>
- < /behaviors>
- < /system.serviceModel>
- < /configuration>
寄宿WCF服务步骤4.利用工具C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe安装windows 服务.installutil.exe winservice.exe
#t#
寄宿WCF服务步骤5.启动服务:net start WCFWindowsServiceSample。如果服务不能启动,可查看事件日志以定位错误.
寄宿WCF服务步骤6.访问wcf服务:http://localhost:8000/service
寄宿WCF服务步骤7.停止wcf服务:net stop WCFWindowsServiceSample
寄宿WCF服务步骤8.卸载windows服务:installutil.exe /u winservice.exe