.Net之SoapCore简单使用

最近在工作中,需要同时放出来WebAPI接口和支持Soap协议的WebService接口,在dotNetFramework时候玩过WebService,这可是好久没再碰过了,没想到现在居然遇到了。只好迎难而上。

介绍

本来是在ASP.NetCore中使用了组件SoapCore来使用Soap协议。

支持以下框架:

  • .NET 5.0(使用 ASP.NET Core 5.0)

  • .NET Core 3.1(使用 ASP.NET Core 3.1)

  • .NET Core 2.1(使用 ASP.NET Core 2.1)

  • .NET Standard 2.0(使用 ASP.NET Core 2.1)

官网:https://github.com/DigDes/SoapCore

操作

准备工作

为了省事,我还在之前的文章demo上面操作,地址是:https://gitee.com/AZRNG/my-example ,分支是:inmemory_soap ,当前项目已经包含一些WebAPI接口,我要实现使用Soap协议也放出这些接口,共用UserService类。

img

开始编写接口

环境:dotnet5.0 + SoapCore 1.1.0.10

安装组件

<PackageReference Include="SoapCore" Version="1.1.0.10" />

ConfigureServices中注入SoapCore

services.AddSoapCore();

新建User WebService

/// <summary>
/// User WebService
/// </summary>
[ServiceContract]
public class UserContractImpl
{private readonly IUserService _userService;private readonly IMapper _mapper;public UserContractImpl(IUserService userService,IMapper mapper){_userService = userService;_mapper = mapper;}/// <summary>/// 查询用户列表/// </summary>/// <returns></returns>[OperationContract]public async Task<List<User>> GetListAsync(){return await _userService.GetListAsync();}/// <summary>/// 查询详情/// </summary>/// <param name="id"></param>/// <returns></returns>[OperationContract]public async Task<User> GetDetailsAsync(string id){return await _userService.GetDetailsAsync(id);}/// <summary>/// 添加/// </summary>/// <param name="dto"></param>/// <returns></returns>[OperationContract]public async Task<string> AddAsync(AddUserVm dto){return await _userService.AddAsync(dto);}/// <summary>/// 删除/// </summary>/// <param name="id"></param>[OperationContract]public async Task<int> DeleteAsync(string id){return  await _userService.DeleteAsync(id);}
}

ConfigureServices中注入

services.AddTransient<UserContractImpl>();

Configure中配置终结点路由

app.UseEndpoints(endpoints =>
{endpoints.MapControllers();var binging = new BasicHttpBinding();binging.ReaderQuotas.MaxStringContentLength = int.MaxValue;endpoints.UseSoapEndpoint<UserContractImpl>("/UserContractImpl.asmx", binging, SoapSerializer.DataContractSerializer);
});

访问地址:http://localhost:5000/UserContractImpl.asmx

img

WebApi程序客户端

新建dotnet5.0项目

img

选中项目右键=>添加=>服务引用=>WCF Web Service

img

输入url,点击go出来服务

img

下一步

img

最后一直下一步直到完成

img

这个时候vs已经帮我们生成了调用的方法,后期地址有变动可以直接去修改这个代码。

ConfigureServices中注册

services.AddSingleton<UserContractImpl>(new UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding));

控制器注入

private readonly UseService.UserContractImpl _userContractImpl;public HomeController( UseService.UserContractImpl userContractImpl)
{_userContractImpl = userContractImpl;
}

使用里面的接口

var result = await _userContractImpl.AddAsync(new UseService.AddUserVm
{Account = "123",PassWord = "456",Sex = UseService.SexEnum.Man
});
var list = await _userContractImpl.GetListAsync();

通过先调用添加接口然后调用查询接口可以查询到我们刚才添加到的数据。

控制台程序

向上面一样将Soap服务引用到项目中

事例一:直接构建UserContractImplClient

var client = new UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding);
var str = await client.AddAsync(new AddUserVm
{Account = "23456",PassWord = "456",Sex = SexEnum.Noknow
});
var list = client.GetListAsync();

事例二:

// 创建 HTTP 绑定对象
var binding = new BasicHttpBinding();
// 根据 WebService 的 URL 构建终端点对象
var endpoint = new EndpointAddress(@"http://localhost:5000/UserContractImpl.asmx");
// 创建调用接口的工厂,注意这里泛型只能传入接口
var factory = new ChannelFactory<UserContractImplChannel>(binding, endpoint);
// 从工厂获取具体的调用实例
var callClient = factory.CreateChannel();
// 调用具体的方法,这里是 GetListAsync 方法。
var result = await callClient.GetListAsync();

参考文档

https://github.com/DigDes/SoapCore

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word打不开,如何修复word文档?

2019独角兽企业重金招聘Python工程师标准>>> 亲爱的你有没有遇到过写了好久的一篇文档突然打不开的惨剧&#xff1f;有没有为一篇重要的文件被损坏而苦恼几天的情形&#xff1f;遇到这种情况怎么办&#xff1f;不要急&#xff0c;不要急&#xff01;我将会给你带来一…

java utf8 转换al32utf8_java与Unicode

在notepad中用utf8格式保存“你好”两个汉字&#xff0c;文件名为a.txt.在eclipse中设置编码格式为gbk.在eclipse中用FileReader读取这个文件。FileReader的read方法返回的为int型&#xff0c;用char做强制转换。结果出现乱码&#xff0c;第一个乱码为“浣”。由于a.txt中的编码…

Nginx实用指南V1 (连载之六:cacti监控)

申明&#xff1a;本连载的文章来自&#xff1a;Nginx官网、张 宴BLOG、linuxtone论坛、互联网、本人原创。并尽力在官网文档的基础发表原创作品。并保证文档的质量与错误率。如有作者认为本文有涉及版权问 题请与我联系&#xff1a; liuyu105#gmail.com。 Nginx 监控(cacti) A、…

面试了57位数据分析师,我发现牛逼的人都有这4个特质

全世界只有3.14 % 的人关注了爆炸吧知识现在的职场竞争越来越激烈&#xff0c;不学上一两门新技能&#xff0c;保持自己知识更新&#xff0c;很容易被年轻后辈超越。有些人选择学一门外语&#xff0c;有些人选择学习职场上为人处事的能力。如果你的工作需要和数据打交道&#x…

iNeuOS工业互联网,增加一批PLC、核工业、数字模块、传感器等设备驱动

增加流量计、AI/AO/DI/DO模块、质谱、色谱、加热炉及其他行业专用设备等&#xff0c;不同的通讯协议和通讯机制整体集成到iNeuOS系统中。数据采集&#xff0c;涉及到领域的专业设备、通用设备和PLC&#xff0c;有国内传感器和国外传感器&#xff0c;通讯协议和数据格式多种多样…

屏保自己做

因需要根据不同星期自动调用不同屏保图片&#xff0c;自己动手做了一个 代码如下&#xff1a; //主工程文件 program scrsave;usesForms,Unit1 in Unit1.pas {Form1};{$R *.res}beginApplication.Initialize;Application.Title : 横店屏保一;Application.CreateForm(TForm1, Fo…

SpringMVC异常处理流程

2019独角兽企业重金招聘Python工程师标准>>> Controller中的方法执行出现异常ex.ex在DispatchServlet中被捕获,交给默认的ExceptionHandlerExceptionResolver进行处理.ExceptionHandlerExceptionResolver先在Controller中找标有ExceptionHandler的方法.没有找到. go…

python if main_Python:if __name__ == '__main__'

简介&#xff1a;__name__是当前模块名&#xff0c;当模块被直接运行时模块名为_main_&#xff0c;也就是当前的模块&#xff0c;当模块被导入时&#xff0c;模块名就不是__main__&#xff0c;即代码将不会执行。关于代码if __name__ __main__: 下面举几个例子解释下:先编写一…

mysql select 反选_JQuery实现全选、全不选和反选功能

Insert title here学员信息查询管理系统条件&#xff1a;全选 反选学号姓名性别年龄成绩班级$(selectStu())functionselectStu() {$.ajax("StuList",{type:"post",data:{"method":"finList"},success:function(data){//循环遍历$.each…

真希望永远用不到这些代码

<style> html{filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1);} </style> 汶川大地震的时候用过一次&#xff0c;如今又要用了……

为什么盯一个字看久了,反而感觉不认识了?

全世界只有3.14 % 的人关注了爆炸吧知识你肯定有过这样一种体验——长时间盯着某个字看&#xff0c;或者重复写一个字&#xff0c;就会觉得这个字越写越不认识想想你被老师罚抄作业的时候……盯着这张图看1分钟▼你是不是就不认识“哈”了神经活动被你“玩累”了盯着一个字看久…

自建PicGo图床

介绍图床工具&#xff0c;就是自动把本地图片转成连接的一款工具&#xff0c;网络上有很多图床工具&#xff0c;PicGo就是一款比较优秀的图床工具&#xff0c;可以支持微博&#xff0c;七牛云&#xff0c;腾讯云COS&#xff0c;又拍云&#xff0c;GitHub&#xff0c;阿里云OSS&…

3D 架设场景

指定视口glViewport指定投影变换glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(30, 1, 0.1, 50);指定视图变换glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);gluPerspective(GLdouble fovy,G…

【心情】今天买了ZÈRTZ!

转载于:https://www.cnblogs.com/boringlamb/archive/2010/04/27/1721772.html

promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...

【简答题】一、谈谈你是如何理解JS异步编程的&#xff0c;EventLoop、消息队列都是做什么的&#xff0c;什么是宏任务、什么是微任务&#xff1f;如何理解JS异步编程众所周知JavaScript语言执行环境是“单线程”(单线程&#xff0c;就是指一次只能完成一件任务&#xff0c;如果…

python姓名输出语句_Python最基本的输入输出详解

输出用print加上字符串&#xff0c;就可以向屏幕上输出指定的文字。比如输出hello, world&#xff0c;用代码实现如下&#xff1a;>>> print hello, worldprint语句也可以跟上多个字符串&#xff0c;用逗号“,”隔开&#xff0c;就可以连成一串输出&#xff1a;>&g…

当代人的恋爱步骤

1 耳朵连线了&#xff1f;2 有时候我们更需要做一个稳重的吃货3 你大爷果然是你大爷… 4 我竟然下意识的吹了一口5 这也太孤独了6 当代人的恋爱步骤7 据说这张图上有10个人&#xff0c;你能找到几个&#xff1f;你点的每个赞&#xff0c;我都认真当成了喜欢

使用EF Core操作层次结构数据

前言以前我们存储层次结构常用IdParentId的方式&#xff0c;例如&#xff1a;IdParentIdName1null总公司21分公司131分公司242部门A54小组X64小组Y这种方式查询效率不高&#xff0c;比如查询分公司1下的所有小组&#xff0c;必须使用递归。针对这个问题&#xff0c;如果你是使用…

sql2005数据导入出错问题

最近在把一个大的文本文件中的数据导入到sql2005中时&#xff0c;出现错误。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />相同文件导入sql2000则不会出现错误。网络上一查&#xff0c;也有部分人碰到这个问题。解决的办法200…

仿UC菜单的实现

http://blog.csdn.net/hellogv/archive/2011/01/28/6168439.aspx &#xff08;另&#xff09;http://www.cnblogs.com/lichien/archive/2010/09/07/1820453.html 先来看看本文程序运行的效果&#xff1a; TabMenu 本身就是一个PopupWindow&#xff0c;PopupWindow上面放了两个G…