基于 C# .NET Framework 4.0 开发实现 WCF 服务实例详解(一)

embedded/2024/10/19 1:27:56/

目录

引言        

1. 创建 WCF 服务库

1.1 创建项目

1.2 定义服务接口

1.3 实现服务接口

2. 配置服务

3. 创建宿主项目

3.1 创建控制台应用程序

3.2 引用服务库

3.3 编写宿主代码

4. 测试 WCF 服务

4.1 启动宿主程序

4.2 添加客户端应用程序

4.3 添加服务引用

4.4 调用服务

5. 运行和测试

概念解释

故障排除


引言        

        我们利用C#可以快速开发各种后端服务,如常见的windows服务、WCF 服务、WebService服务、WebApi等,本文将详细讲解如何基于 C# 和 .NET Framework 4.0 开发一个 WCF 服务,确保每个步骤都清晰且易于理解和掌握。

1. 创建 WCF 服务库

1.1 创建项目
  1. 打开 Visual Studio。
  2. 选择 File -> New -> Project
  3. 选择 WCF 模板下的 WCF Service Library,命名为 WcfServiceLibrary1
1.2 定义服务接口

IService1.cs 中定义服务接口:

using System.ServiceModel;namespace WcfServiceLibrary1
{// ServiceContract 表示这是一个服务接口[ServiceContract]public interface IService1{// OperationContract 表示这是一个可调用的服务方法[OperationContract]string GetData(int value);}
}
1.3 实现服务接口

Service1.cs 中实现服务接口:

namespace WcfServiceLibrary1
{// 具体实现服务接口的方法public class Service1 : IService1{public string GetData(int value){// 返回一个简单的字符串return $"You entered: {value}";}}
}

2. 配置服务

打开 App.config,确保配置如下:

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

3. 创建宿主项目

3.1 创建控制台应用程序
  1. 添加一个新的 "Console Application" 项目来宿主 WCF 服务,命名为 ConsoleHost
3.2 引用服务库

在控制台应用程序中添加对 WcfServiceLibrary1 项目的引用。

3.3 编写宿主代码

Program.cs 中编写代码以宿主服务:

using System;
using System.ServiceModel;namespace ConsoleHost
{class Program{static void Main(string[] args){// 创建 ServiceHost 实例来宿主 WCF 服务using (ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary1.Service1))){try{// 打开服务host.Open();Console.WriteLine("Service is running...");Console.WriteLine("Press <Enter> to stop the service.");Console.ReadLine();}catch (Exception ex){Console.WriteLine($"An error occurred: {ex.Message}");}}}}
}

4. 测试 WCF 服务

4.1 启动宿主程序

运行控制台应用程序 ConsoleHost 以启动服务。

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

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

4.4 调用服务

在客户端的 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();}}
}

5. 运行和测试

  1. 启动 ConsoleHost 项目以宿主 WCF 服务。
  2. 运行 WcfClient 项目,您应该会看到输出 You entered: 42

概念解释

  • ServiceContract: 用于定义服务接口。
  • OperationContract: 用于标记服务方法。
  • ServiceHost: 用于宿主服务,提供服务管理和生命周期管理。
  • Endpoint: 定义服务的地址、绑定和契约。
  • Binding: 定义如何传输消息(比如 basicHttpBinding)。
  • Contract: 定义服务接口(比如 IService1)。

故障排除

  • 如果服务无法启动,请检查 App.config 中的配置是否正确。
  • 如果客户端无法调用服务,请确保服务地址正确且服务已经启动。
  • 使用 ServiceTraceViewer 查看更详细的WCF跟踪和日志,以帮助诊断问题。

        通过这些步骤和解释,您应该能够深入了解并掌握基于 C# 和 .NET Framework 4.0 的 WCF 服务开发技术。如果遇到任何问题,请提供具体的错误信息以便进一步诊断和解决问题。


http://www.ppmy.cn/embedded/127239.html

相关文章

Qt QTableWidget多行表头、表头折行显示

表头折行显示 //方法一QVector<QString> chNames;chNames<<"表头1"<<"表头2长命名abcdefg";ui.tableWidget->setColumnCount(chNames.size()1);ui.tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(QString::fromL…

Rust学习如何更有信心?

关于如何学习Rust&#xff0c;在Hacker News上有一篇非常火的教程&#xff0c;作者通过自己的Rust学习经历&#xff0c;向大家指出了一条如何学习Rust的路径。 学习一门编程语言必不可少的是阅读技术书籍和编写代码&#xff0c;要想掌握Rust&#xff0c;两者的交替学习至关重要…

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理

前言 本文分享YOLO11的关键改进点、性能对比、安装使用、模型训练和推理等内容。 YOLO11 是 Ultralytics 最新的实时目标检测器&#xff0c;凭借更高的精度、速度和效率重新定义了可能性。 除了传统的目标检测外&#xff0c;YOLO11 还支持目标跟踪、实例分割、姿态估计、OBB…

2.1 使用点对点信道的数据链路层

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 通信信道类型2 数据链路3 帧4 透明传输5 差错检测 前言 在计算机网络通信中&#xff0c;数据链路层起着关键作用。它为直接相连的网络设备之间提供可靠的数据传输服务。…

数据分析进度条制作

先看效果 第一个图 1.新建一个完整进度条度量值 2.选取簇状条形图 3.拖拽字段&#xff0c;进度达成的总和是Excel已经处理好的百分比 4.将条形模块的重叠和翻转重叠开启&#xff0c;类别间距20%&#xff0c;系列间距100% 5.注意点来了&#xff0c;这个图的条形模块数据系…

InfluxDB持久层封装

InfluxDB持久层封装 了解如何使用spring-boot来操作InfluxDB数据库&#xff0c;首先我们来看下整个的系统结构图例&#xff1a; 对比下mybatis中的执行流程&#xff1a; 1_自动装配 首先&#xff0c;我们来看下第一步自动装配&#xff1a;依赖spring-boot自动装配出InfluxDB对…

工程师 - 版本管理工具从CVS到SVN的演变

CVS - Concurrent Versions System CVS&#xff08;Concurrent Versions System&#xff0c;并发版本系统&#xff09;在软件开发早期曾被广泛用作版本控制系统&#xff0c;但后来由于多种原因而过时&#xff0c;并被 SVN&#xff08;Subversion&#xff09;等更新的系统所取代…

3.6.xx版本SpringBoot创建基于Swagger接口文档

介绍 基于Swagger构建的JavaAPI文档工具&#xff0c;实现后端功能的测试&#xff0c;并撰写API接口文档。 方法 pom.xml中引入依赖,要注意的是&#xff0c;本依赖使用的SpringBoot版本为3.6.xx <!--Knife4j--><dependency><groupId>com.github.xiaoymin<…