webapi创建和调用WebService

news/2024/10/14 20:21:16

首先需要引入soapcore包

image

这个包提供了所需的类和soap终结点中间件。

引入这个这个包之后,我们需要定义提供的服务。

这里我写了一个用于查询省份面积的服务。

省份信息服务
/// <summary>
/// 省份信息服务接口
/// </summary>
[ServiceContract]
public interface IProvinceInfoService
{/// <summary>/// 获取省份面积/// </summary>/// <param name="provinceName"></param>/// <returns></returns>[OperationContract]ProvinceResult GetProvinceInfo(string provinceName);
}/// <summary>
/// 省份信息服务实现
/// </summary>
public class ProvinceInfoService : IProvinceInfoService
{public ProvinceResult GetProvinceInfo(string provinceName){if (string.IsNullOrEmpty(provinceName)){return new ProvinceResult();}else{switch (provinceName){case "四川":return new ProvinceResult() { Name= provinceName,Area=48.14m };case "新疆":return new ProvinceResult() { Name = provinceName, Area = 166 };default:return new ProvinceResult() { Name = provinceName};}}}
}/// <summary>
/// 实体类
/// </summary>
[DataContract]
public class ProvinceResult
{[DataMember]public string Name { get; set; }[DataMember]public decimal Area { get; set; }
}

定义服务之后在web主机中注册服务

//添加webService服务
builder.Services.AddSingleton<IProvinceInfoService, ProvinceInfoService>();
//添加webservice服务终结点,当请求的资源在控制器中路由不到时会路由到这里
app.UseSoapEndpoint<IProvinceInfoService>("/ProvinceInfoService", new SoapEncoderOptions());

现在WebService就创建好了,实在是很简单。只是soapcore没有提供测试页面,而netFramework用.asmx写的服务不加后面的路径时,返回的是一个HTML测试页面,很方便。soapcore就没有搞这个了,默认是返回WSDL文件。

测试服务

  • WSDL文件测试

image

  • 服务方法测试

image

添加WebService服务引用

为了方便测试,我把项目发布了一下,然后把发布了的项目exe运行了起来。在解决方案中再添加正在运行的项目里面那个WebService。
有两种方法添加服务引用

  • 第一种是在项目上右键选择添加->服务引用,选择WCF那一项
    image
  • 第二种方式是双击项目下面的Connected Service,然后选择连接的服务,在服务引用那一栏点+号。仍然会弹出同样的界面
    选择下一步后,出现弹窗
    image
  • 填上服务的地址后点击转到。
  • 点击浏览,选择别人给的WSDL文件
    这两种方式都可以
    然后可以改一下自己认为合适的命名空间,我改为了ProvinceServiceReference
    然后一路下一步就行

使用WebService

使用方式和普通的实例方法调用一样,我把它写到控制器Action中

[HttpGet]
[AllowAnonymous]
public async Task<object> GetProvinceService(string provinceName)
{ProvinceInfoServiceClient client = new ProvinceInfoServiceClient();return await client.GetProvinceInfoAsync(provinceName);
}
  • 测试

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Y2 知识和题单

Link。 0x01 进制 引入 计数原理,对于 \(N\) 进制,那么就是逢 \(N\) 进一。 计算机中常用二进制,对应电路中的通电(\(1\))断电(\(0\))。 人类从远古以来使用十进制。 常用的有二进制、三进制、八进制、十进制、十六进制等。 由于不同进制之间数值写法可能相同,在没有特…

m基于CCSDS标准的LDPC编码器的FPGA实现,包含testbench,码长1024,码率0.5

1.算法仿真效果 vivado2019.2仿真结果如下:2.算法涉及理论知识概要LDPC码是一种具有稀疏校验矩阵的线性分组码,由Robert G. Gallager在1962年首次提出。它利用图论中的 Tanner 图来表示其编解码结构,其中节点分为变量节点和校验节点。变量节点对应于消息比特,而校验节点则对…

【Qt 专栏】信号与槽详解

5个重要的结论: 1. 对于QT,GUI程序设计的逻辑需要4元素:信号、信号发射者、信号接受者、槽。例如,点击按键后,窗口关闭,这四者的关系如下所示: 2. 信号函数返回类型为void,不需要实现。参数类型可以重载。调用时前面可以加 emit(也可不加),表示信号释放。 3. 槽函数…

如何批量复制多个文件到多个目录中(批量复制文件,多对多文件高效操作的方法)

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z现在开始说具体操作 1、首先,我准备了3个文件夹和两个可爱的图片:当然,在实际使用的时候肯定不止这些,我这里只是演示一下下。 2、然后打开这个工具,按下CTRL+5,切换到文件批量复制的功能模块。 把两…

要看就看极品视频

有关西安的极品视频分享给各位,一场视觉盛宴。前言 不可多得的极品视频,大神制作,看到就想收藏并分享给各位。共同享受非常有底蕴的城市,西安。 极品视频在西安,你就能拥有时间魔法有魔法就可以为所欲为魔法西安丨你见过会动的大唐不夜城吗看完视频,我只感觉到任何事情做…

力扣-82. 删除排序链表中的重复元素

1.题目 题目地址(82. 删除排序链表中的重复元素 II - 力扣(LeetCode)) https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/ 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例 …

联考物理T24

Solution — T24 题目描述 (本PDF为 JJL 所制)如图所示,一厚壁玻璃容器放在水平面桌面上,容器底内底面积为 $50\ cm^2 $,外底面积为 $100 \ cm^2 $。将一定质量的水倒入容器中,水的深度为 \(10 \ cm\) 。求:\((p_水=1.0 \times 10^3 kg/m^3 , g \text{取} 10 N/kg)\)(1) 水对…

物理解题

Solution — T24 题目描述 (本PDF为 JJL 所制)如图所示,一厚壁玻璃容器放在水平面桌面上,容器底内底面积为 $50\ cm^2 $,外底面积为 $100 \ cm^2 $。将一定质量的水倒入容器中,水的深度为 \(10 \ cm\) 。求:\((p_水=1.0 \times 10^3 kg/m^3 , g \text{取} 10 N/kg)\)(1) 水对…