当前位置: 首页 > news >正文

基于 C# .NET Framework 4.0 开发实现 WCF 服务实例详解(二)——实现Windows服务内嵌WCF服务

目录

引言        

1. 创建一个新的Windows服务项目

2. 添加WCF服务

2.1 添加服务接口和实现

2.2 添加服务配置

3. 实现Windows服务

3.1 修改Service1类

3.2 在项目中添加ServiceInstaller

4. 安装和运行Windows服务

4.1 编译项目

4.2 使用InstallUtil.exe安装服务

4.3 启动服务

5. 测试WCF服务

5.1 添加客户端应用程序

5.2 添加服务引用

5.3 调用服务

6. 卸载Windows服务


引言        

        我们利用C#可以快速开发各种后端服务,如常见的windows服务、WCF 服务、WebService服务、WebApi等,上一篇文章介绍了简单WCF服务的实现,本文将详细讲解如何基于 C# 和 .NET Framework 4.0 将 WCF服务和宿主项目合并到同一个项目中,并将其安装为Windows服务,确保每个步骤都清晰且易于理解和掌握。

以下是详细的步骤:

1. 创建一个新的Windows服务项目

  1. 打开Visual Studio,创建一个新的项目。
  2. 选择 Windows Service 项目类型,命名为 WcfWindowsService

2. 添加WCF服务

2.1 添加服务接口和实现

在项目中添加两个类:IService1.csService1.cs

IService1.cs:

using System.ServiceModel;namespace WcfWindowsService
{[ServiceContract]public interface IService1{[OperationContract]string GetData(int value);}
}

Service1.cs:

namespace WcfWindowsService
{public class Service1 : IService1{public string GetData(int value){return $"You entered: {value}";}}
}
2.2 添加服务配置

在项目中添加一个 App.config 文件,并添加以下配置:

<configuration><system.serviceModel><services><service name="WcfWindowsService.Service1"><endpoint address="" binding="basicHttpBinding" contract="WcfWindowsService.IService1" /><host><baseAddresses><add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfWindowsService/Service1/" /></baseAddresses></host></service></services><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="True" /><serviceDebug includeExceptionDetailInFaults="False" /></behavior></serviceBehaviors></behaviors></system.serviceModel>
</configuration>

3. 实现Windows服务

3.1 修改Service1类

Service1.cs 文件中创建一个新的类 WcfService,继承自 ServiceBase 类:

using System;
using System.ServiceModel;
using System.ServiceProcess;namespace WcfWindowsService
{public partial class WcfService : ServiceBase{public ServiceHost serviceHost = null;public WcfService(){InitializeComponent();}protected override void OnStart(string[] args){if (serviceHost != null){serviceHost.Close();}serviceHost = new ServiceHost(typeof(Service1));serviceHost.Open();}protected override void OnStop(){if (serviceHost != null){serviceHost.Close();serviceHost = null;}}}
}
3.2 在项目中添加ServiceInstaller
  1. 右键点击项目,选择 Add -> New Item
  2. 选择 Component Class,命名为 ProjectInstaller.cs

ProjectInstaller.cs 中实现服务安装:

using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;namespace WcfWindowsService
{[RunInstaller(true)]public partial class ProjectInstaller : Installer{private ServiceProcessInstaller processInstaller;private ServiceInstaller serviceInstaller;public ProjectInstaller(){processInstaller = new ServiceProcessInstaller();serviceInstaller = new ServiceInstaller();// 设置服务使用的账号类型processInstaller.Account = ServiceAccount.LocalSystem;// 设置服务信息serviceInstaller.ServiceName = "WcfWindowsService";serviceInstaller.DisplayName = "WCF Windows Service";serviceInstaller.StartType = ServiceStartMode.Manual;Installers.Add(processInstaller);Installers.Add(serviceInstaller);}}
}

4. 安装和运行Windows服务

4.1 编译项目

确保项目没有错误,然后编译项目。

4.2 使用InstallUtil.exe安装服务

打开管理员权限的命令提示符,导航到编译输出目录(通常是bin\Debug或bin\Release),并运行以下命令以安装服务:

installutil WcfWindowsService.exe
4.3 启动服务
  1. 打开 Services 管理器(按下Win+R,输入 services.msc 后回车)。
  2. 找到名为 WcfWindowsService 的服务。
  3. 右键点击服务,选择 Start 启动服务。

5. 测试WCF服务

5.1 添加客户端应用程序
  1. 创建一个新的 Console Application 项目来测试服务,命名为 WcfClient
5.2 添加服务引用

在客户端项目中,右键点击项目,选择 Add Service Reference,输入服务地址(如 http://localhost:8733/Design_Time_Addresses/WcfWindowsService/Service1/),然后点击 GoOK

5.3 调用服务

在客户端的 Program.cs 中调用服务:

using System;namespace WcfClient
{class Program{static void Main(string[] args){var client = new ServiceReference1.Service1Client();string result = client.GetData(42);Console.WriteLine(result);client.Close();}}
}

6. 卸载Windows服务

如果不再需要服务,可以卸载:

installutil /u WcfWindowsService.exe

        通过这些步骤,您可以将WCF服务和宿主项目合并到同一个项目中,并将其安装为Windows服务。这样可以实现WCF服务的长期运行,并通过Windows服务管理器来管理服务的生命周期。

相关文章:

基于 C# .NET Framework 4.0 开发实现 WCF 服务实例详解(二)——实现Windows服务内嵌WCF服务

目录 引言 1. 创建一个新的Windows服务项目 2. 添加WCF服务 2.1 添加服务接口和实现 2.2 添加服务配置 3. 实现Windows服务 3.1 修改Service1类 3.2 在项目中添加ServiceInstaller 4. 安装和运行Windows服务 4.1 编译项目 4.2 使用InstallUtil.exe安装服务 …...

【ArcGIS/C#】调用控制台处理代码

代码示例 private static string[] run_conda_process(string command, Action<string> on_msg, CancellationTokenSource cancel){if (string.IsNullOrEmpty(command)){return new string[]{null,ArcGIS.Desktop.Internal.Core.Conda.Resources.Error_Unexpected + &qu…...

06_23 种设计模式之《适配器模式》

文章目录 一、适配器模式基础知识实例 一、适配器模式基础知识 适配器模式定义&#xff1a;将一个类的接口转换成客户希望的另一个接 口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可 以一起工作。 Client&#xff1a;客户端&#xff0c;调用自已需要的领域接口…...

Go语言--快速入门

Go语言特点 我们先看一下简单的Go语言程序 package mainimport "fmt"func main() { // 错误&#xff0c;{ 不能在单独的行上fmt.Println("Hello, World!") }我们可以看到外型非常像我们的JAVA&#xff0c;但是不需要&#xff1b;作为结尾&#xff0c;…...

京东云主机怎么用?使用京东云服务器建网站(图文教程)

京东云主机怎么用&#xff1f;非常简单&#xff0c;本文京东云服务器网jdyfwq.com使用以使用京东云服务器搭建WordPress博客网站为例&#xff0c;来详细说下京东云主机的使用方法。使用京东云服务器快速搭建WordPress网站教程&#xff0c;3分钟基于应用镜像一键搞定&#xff0c…...

Linux 基础入门操作-实验七 进程的介绍

实验七 进程的介绍 7.1 进程基础概念 Linux进程在内存中包含三部分数据&#xff1a;码段、堆栈段和数据段。代码段存放了程序的代码。代码段可以为机器中运行同一程序的数个进程共享。堆栈段存放的是子程序的返回地址、子程序的参数及程序的局部变量。而数据段则存放程序的全…...

SQL进阶技巧:SQL中的正则表达式应用?

目录 0 引言 1. 正则表达式函数 1.1 regexp_extract 1.2 regexp_replace 1.3 regexp_like 2. 在WHERE子句中使用正则表达式 3. 在GROUP BY中使用正则表达式 4. 性能考虑 5. 高级正则表达式技巧 5.1 使用正则表达式进行数据清洗 5.2 使用正则表达式处理JSON 6. 正则…...

算法数组面试理论

数组是存放在连续内存空间内的相同类型数据的集合 &#xff08;所以在删除添加元素的时候需要移动其他的元素的地址&#xff09; 数组的元素是不能删除的&#xff0c;只能覆盖。&#xff08;因为内存地址是连续的&#xff0c;所以不能删除。或者可以这么理解&#xff1a;在一…...

ASP.NET Zero是什么?适合哪些业务场景?

一、ASP.NET Zero是什么&#xff1f; ASP.NET Zero 是一个基于 ASP.NET Boilerplate (ABP) 框架的模板项目&#xff0c;它提供了预建的页面和强大的基础设施架构&#xff0c;以便开发者能够快速开发应用层。它的特点包括但不限于&#xff1a; 多合一解决方案&#xff1a;提供多…...

获取期货股票分钟级别数据以及均线策略

【数据获取】 银河金融数据库&#xff08;yinhedata.com&#xff09; 能够获取国内外金融股票、期货历史行情数据&#xff0c;包含各分钟级别。 【搭建策略】 均线策略作为一种广泛应用于股票、期货等市场的技术分析方法&#xff0c;凭借其简单易懂、操作性强等特点&#xf…...

入门篇-1 数据结构简介

数据结构简介 在计算机科学中&#xff0c;数据结构是指组织、存储和管理数据的方式&#xff0c;它使得数据可以被高效地访问和修改。数据结构是计算机程序设计和算法分析中的一个重要概念&#xff0c;因为它们直接影响到程序的执行效率和内存使用。 1. 什么是数据结构&#x…...

Anaconda安装

1.进入Anaconda官网 2.填写邮箱信息 3.在邮箱消息中获取下载链接 4.进入下载页面&#xff0c;选择合适版本下载 5.进入Anaconda安装界面 6.点击“I agree” 7.选择个人即可“Just Me” 8.选择文件安装路径 9.允许创建快捷方式 10.等待下载 11.完成安装...

Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群

随着业务的增长&#xff0c;陆续会有新的节点需要加入集群。当我们在集群中的某个节点上使用命令生成令牌时会出现报错信息。 # 生成令牌 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node出现报错信息&#xff1a; Unable to create enrollment…...

项目建设方案,软件技术方案,整体技术方案,软件建设文档编制(word原件)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…...

vue3定义组件

在Vue 3中&#xff0c;定义组件有多种方式&#xff0c;包括使用单文件组件&#xff08;Single File Components, SFC&#xff09;、使用JavaScript对象定义组件、以及使用组合式API&#xff08;Composition API&#xff09;。 1. 单文件组件&#xff08;SFC&#xff09; 这是…...

BOM常见操作方法汇总

BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;提供了与浏览器窗口交互的方法和属性。BOM 包括了许多对象&#xff0c;如 window、location、history、navigator 等&#xff0c;这些对象提供了与浏览器窗口相关的各种功能。 以下是一些常见的 BO…...

Python+whisper/vosk实现语音识别

目录 一、Whisper 1、Whisper介绍 2、安装Whisper 3、使用Whisper-base模型 4、使用Whisper-large-v3-turbo模型 二、vosk 1、Vosk介绍 2、vosk安装 3、使用vosk 三、总结 一、Whisper 1、Whisper介绍 Whisper 是一个由 OpenAI 开发的人工智能语音识别模型&#xf…...

如何在算家云搭建LivePortrait(视频生成)

一、LivePortrait简介 LivePortrait 是一个可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。 该项目的模型产生了定性肖像动画。只要输入一张静态的肖像图像&#xff0c;我们的模型…...

CSS 命名规范及 BEM 在前端开发中的实践

一:CSS命名规范的重要性 1、提高代码可读性 对于开发者自身来说,遵循规范的命名可以让你在日后回顾代码时,快速理解每个样式类的用途。例如,使用 “.header-logo” 这样的命名,一眼就能看出是头部的 logo 元素的样式,而不是一些无意义的命名如 “.box1”。当团队协作开发…...

SwiftUI 6.0(iOS 18)新增的网格渐变色 MeshGradient 解惑

概述 在 SwiftUI 中&#xff0c;我们可以借助渐变色&#xff08;Gradient&#xff09;来实现更加灵动多彩的着色效果。从 SwiftUI 6.0 开始&#xff0c;苹果增加了全新的网格渐变色让我们对其有了更自由的定制度。 因为 gif 格式图片自身的显示能力有限&#xff0c;所以上面的…...

ComfyUI-VideoHelperSuite:AI视频工作流的专业解决方案

ComfyUI-VideoHelperSuite&#xff1a;AI视频工作流的专业解决方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 你是否在ComfyUI中处理视频时感到困扰&#xf…...

C语言状态模式实战:从设计思想到嵌入式状态机实现

1. 项目概述&#xff1a;从“状态”到“模式”的思维跃迁在嵌入式开发、游戏逻辑、网络协议解析乃至日常的业务流程控制中&#xff0c;我们常常会面对一个核心挑战&#xff1a;如何优雅地管理一个对象随着内部条件改变而表现出的不同行为&#xff1f;比如&#xff0c;一个自动售…...

APK Installer终极指南:在Windows电脑上快速安装Android应用的完整方案

APK Installer终极指南&#xff1a;在Windows电脑上快速安装Android应用的完整方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了在电脑和手机之间来回传…...

大语言模型驱动SVG代码生成:原理、实践与应用前景

1. 项目概述&#xff1a;当大语言模型遇上SVG图形生成最近在开源社区里&#xff0c;一个名为“ximinng/LLM4SVG”的项目引起了我的注意。这个项目名字直译过来就是“用于SVG的大语言模型”&#xff0c;它瞄准了一个非常具体且有趣的交叉领域&#xff1a;利用大语言模型来生成或…...

黑苹果配置神器Hackintool:从新手到高手的完整指南

黑苹果配置神器Hackintool&#xff1a;从新手到高手的完整指南 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool Hackintool被誉为"黑苹果瑞士军刀"&#xff0c;是配置和…...

cargo-whero:极致轻量·满血性能!Rust 原生 HTTP 压测神器正式开源

一、前言&#xff1a;告别臃肿低效&#xff0c;重塑 HTTP 压测体验 在后端开发、接口性能优化、服务容量压测的日常工作中&#xff0c;我们总会被传统压测工具的各种短板困扰&#xff1a; Apache AB&#xff1a;功能极简&#xff0c;不支持复杂请求、限流、精细化统计&#xf…...

AI技能框架实战:构建可扩展的智能体工具调用系统

1. 项目概述&#xff1a;当AI技能成为你的私人助理 最近在折腾AI应用开发的朋友&#xff0c;可能都绕不开一个核心问题&#xff1a;如何让大语言模型&#xff08;LLM&#xff09;不只是个“聊天高手”&#xff0c;而是能真正帮你处理具体事务的“实干家”&#xff1f;比如&…...

如何彻底移除Windows Defender:13项核心服务完整卸载与系统性能优化终极指南

如何彻底移除Windows Defender&#xff1a;13项核心服务完整卸载与系统性能优化终极指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitco…...

硬件身份伪装终极指南:3分钟掌握EASY-HWID-SPOOFER的深度伪装技术

硬件身份伪装终极指南&#xff1a;3分钟掌握EASY-HWID-SPOOFER的深度伪装技术 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 你是否曾经遇到过这样的情况&#xff1a;刚买的软件因…...

Cursor AI插件深度解析:从自动化脚本到智能编程工作流

1. 项目概述&#xff1a;一个为 Cursor 编辑器注入灵魂的 AI 增强插件如果你和我一样&#xff0c;日常开发重度依赖 Cursor 这款“AI 原生”编辑器&#xff0c;那你一定体验过它内置的 AI 对话和代码生成带来的效率提升。但用久了&#xff0c;你可能会发现一些痒点&#xff1a;…...