使用WCF建立简单的Windows服务并生成服务
使用WCF建立简单的Windows服务并生成服务/n/n本教程将指导您使用WCF创建一个简单的Windows服务,并演示如何生成服务、发布服务元数据、启用日志记录以及安装和卸载服务。/n/n1. 打开Visual Studio,选择'新建项目'。/n2. 在'新建项目'对话框中,选择'Windows服务'模板。/n3. 输入项目名称,选择项目保存路径,点击'创建'按钮。/n4. 在'Solution Explorer'中,右击'项目名称'并选择'添加' -> '新建项'。/n5. 在'添加新项'对话框中,选择'WCF服务'模板。/n6. 输入WCF服务名称,选择服务保存路径,点击'添加'按钮。/n7. 在'Solution Explorer'中,右击WCF服务文件并选择'显示WCF服务代码'。/n8. 在WCF服务代码中,添加以下代码:/n/ncsharp/nusing System.ServiceModel;/n/n[ServiceContract]/npublic interface IService/n{/n [OperationContract]/n string HelloWorld();/n}/n/npublic class Service : IService/n{/n public string HelloWorld()/n {/n return 'Hello, World!';/n }/n}/n/n/n9. 在WCF服务代码中,添加以下代码以便在服务启动时启动WCF服务:/n/ncsharp/nusing System.ServiceModel;/n/npublic partial class Service : ServiceBase/n{/n private ServiceHost serviceHost = null;/n/n public Service()/n {/n InitializeComponent();/n }/n/n protected override void OnStart(string[] args)/n {/n if (serviceHost != null)/n {/n serviceHost.Close();/n }/n/n serviceHost = new ServiceHost(typeof(Service));/n serviceHost.Open();/n }/n/n protected override void OnStop()/n {/n if (serviceHost != null)/n {/n serviceHost.Close();/n serviceHost = null;/n }/n }/n}/n/n/n10. 在WCF服务代码中,添加以下代码以便生成服务元数据:/n/ncsharp/nusing System.ServiceModel.Description;/n/npublic partial class Service : ServiceBase/n{/n // .../n/n protected override void OnStart(string[] args)/n {/n // .../n/n ServiceMetadataBehavior metadataBehavior = serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();/n if (metadataBehavior == null)/n {/n metadataBehavior = new ServiceMetadataBehavior();/n serviceHost.Description.Behaviors.Add(metadataBehavior);/n }/n/n metadataBehavior.HttpGetEnabled = true;/n metadataBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;/n/n serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), 'mex');/n }/n/n // .../n}/n/n/n11. 在WCF服务代码中,添加以下代码以便启用基础HTTP绑定:/n/ncsharp/nusing System.ServiceModel.Web;/n/npublic partial class Service : ServiceBase/n{/n // .../n/n protected override void OnStart(string[] args)/n {/n // .../n/n serviceHost.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), 'http://localhost:8080/Service');/n/n // .../n }/n/n // .../n}/n/n/n12. 在WCF服务代码中,添加以下代码以便在服务启动时启动日志记录:/n/ncsharp/nusing System.Diagnostics;/n/npublic partial class Service : ServiceBase/n{/n // .../n/n protected override void OnStart(string[] args)/n {/n // .../n/n EventLog eventLog = new EventLog();/n if (!EventLog.SourceExists('WCF Service'))/n {/n EventLog.CreateEventSource('WCF Service', 'Application');/n }/n/n eventLog.Source = 'WCF Service';/n eventLog.Log = 'Application';/n/n eventLog.WriteEntry('Service started.');/n/n // .../n }/n/n // .../n}/n/n/n13. 在WCF服务代码中,添加以下代码以便在服务停止时停止日志记录:/n/ncsharp/nusing System.Diagnostics;/n/npublic partial class Service : ServiceBase/n{/n // .../n/n protected override void OnStop()/n {/n if (serviceHost != null)/n {/n serviceHost.Close();/n serviceHost = null;/n }/n/n EventLog eventLog = new EventLog();/n eventLog.Source = 'WCF Service';/n eventLog.Log = 'Application';/n/n eventLog.WriteEntry('Service stopped.');/n/n // .../n }/n/n // .../n}/n/n/n14. 在WCF服务代码中,添加以下代码以便安装服务:/n/ncsharp/nusing System.Configuration.Install;/nusing System.Reflection;/nusing System.ServiceProcess;/n/nstatic class Program/n{/n static void Main()/n {/n if (Environment.UserInteractive)/n {/n string[] arguments = Environment.GetCommandLineArgs();/n if (arguments.Length > 1)/n {/n switch (arguments[1])/n {/n case 'install':/n ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });/n break;/n/n case 'uninstall':/n ManagedInstallerClass.InstallHelper(new string[] { '/u', Assembly.GetExecutingAssembly().Location });/n break;/n }/n }/n }/n else/n {/n ServiceBase[] ServicesToRun;/n ServicesToRun = new ServiceBase[]/n {/n new Service()/n };/n ServiceBase.Run(ServicesToRun);/n }/n }/n}/n/n/n15. 在WCF服务代码中,添加以下代码以便卸载服务:/n/ncsharp/nusing System.Configuration.Install;/nusing System.Reflection;/nusing System.ServiceProcess;/n/nstatic class Program/n{/n // .../n/n static void Main()/n {/n if (Environment.UserInteractive)/n {/n string[] arguments = Environment.GetCommandLineArgs();/n if (arguments.Length > 1)/n {/n switch (arguments[1])/n {/n case 'install':/n ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });/n break;/n/n case 'uninstall':/n ManagedInstallerClass.InstallHelper(new string[] { '/u', Assembly.GetExecutingAssembly().Location });/n break;/n }/n }/n }/n else/n {/n // .../n }/n }/n}/n/n/n16. 在'Solution Explorer'中,右击'项目名称'并选择'属性'。/n17. 在'属性页'中,选择'调试'选项卡。/n18. 在'启动操作'中,选择'外部程序'并输入'C://Windows//Microsoft.NET//Framework//v4.0.30319//InstallUtil.exe'。/n19. 在'命令行参数'中输入'$(TargetPath)'。/n20. 点击'确定'按钮以保存设置。/n21. 在'Solution Explorer'中,右击'项目名称'并选择'生成' -> '生成解决方案'。/n22. 打开'命令提示符'并输入'sc create WCFService binPath= /'C://.../WCFService.exe/'',其中'C://.../WCFService.exe'为WCF服务的路径。/n23. 打开'服务'管理器并启动'WCF Service'服务。/n24. 打开浏览器并访问'http://localhost:8080/Service?wsdl'以访问服务元数据。/n25. 打开'WCF Test Client'并添加服务引用。/n26. 在'WCF Test Client'中,选择服务方法并点击'调用'按钮,以调用服务方法并显示返回值。/n/n注意:/n* 以上代码片段中的'...'表示可以省略的部分,根据实际代码情况进行调整。/n* 'C://.../WCFService.exe'代表WCF服务的实际路径,请根据实际情况进行修改。/n* 本教程仅供参考,您可以根据自己的需求进行修改和扩展。/n
原文地址: https://www.cveoy.top/t/topic/oRVM 著作权归作者所有。请勿转载和采集!