.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类。
开始编写接口
环境: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();
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
WebApi程序客户端
新建dotnet5.0项目
选中项目右键=>添加=>服务引用=>WCF Web Service
输入url,点击go出来服务
下一步
最后一直下一步直到完成
这个时候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
相关文章
- WPF开发入门尝试
- 微软公告:ASP.NET曝漏洞 Win7等均中招
- WCF初接触实作之服务发布和使用
- WCF初次操作实践
- .NET程序员快来Visual Studio刷“成就”
- .NET垃圾回收机制知识点整理
- ASP.NET_正则表达式_匹配HTML中的一行或多行
- 利用WCF实现将服务器端的错误信息返回
- 怎样做一个快乐的ASP.NET程序员
- 为什么我们不要.NET程序员
- DDD落地,如何持久化聚合
- 迁移 dotnet 6 提示必须将目标平台设置为 Windows 平台
- C++|I/O|基于缓冲区的位级IO流
- 006: Django ajax请求
- 012:Django高级请求
- 开发者调查:C#在云应用中失去了地位 在游戏中依然大行其道
- 彻底理解 IO 多路复用实现机制
- 微软.NET 5.1迎来RC1版本 开发者已可上线尝鲜
- 速度和性能狂卷,.NET 7有多少人买单
- 风云再续:他抖任他抖,IO诊断在我手