文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

.Net之SoapCore简单使用

2024-12-13 23:50

关注

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

介绍

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

支持以下框架:

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

操作

准备工作

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

开始编写接口

环境:dotnet5.0 + SoapCore 1.1.0.10

安装组件

  1. "SoapCore" Version="1.1.0.10" /> 

ConfigureServices中注入SoapCore

  1. services.AddSoapCore(); 

新建User WebService

  1. ///  
  2. /// User WebService 
  3. ///  
  4. [ServiceContract] 
  5. public class UserContractImpl 
  6.     private readonly IUserService _userService; 
  7.     private readonly IMapper _mapper; 
  8.  
  9.     public UserContractImpl(IUserService userService, 
  10.         IMapper mapper) 
  11.     { 
  12.         _userService = userService; 
  13.         _mapper = mapper; 
  14.     } 
  15.  
  16.     ///  
  17.     /// 查询用户列表 
  18.     ///  
  19.     /// <returns>returns
  20.     [OperationContract] 
  21.     public async TaskUser>> GetListAsync() 
  22.     { 
  23.         return await _userService.GetListAsync(); 
  24.     } 
  25.  
  26.     ///  
  27.     /// 查询详情 
  28.     ///  
  29.     /// name="id"
  30.     /// <returns>returns
  31.     [OperationContract] 
  32.     public async Task<User> GetDetailsAsync(string id) 
  33.     { 
  34.         return await _userService.GetDetailsAsync(id); 
  35.     } 
  36.  
  37.     ///  
  38.     /// 添加 
  39.     ///  
  40.     /// name="dto"
  41.     /// <returns>returns
  42.     [OperationContract] 
  43.     public async Task AddAsync(AddUserVm dto) 
  44.     { 
  45.         return await _userService.AddAsync(dto); 
  46.     } 
  47.  
  48.     ///  
  49.     /// 删除 
  50.     ///  
  51.     /// name="id"
  52.     [OperationContract] 
  53.     public async Task<int> DeleteAsync(string id) 
  54.     { 
  55.         return  await _userService.DeleteAsync(id); 
  56.     } 

ConfigureServices中注入

  1. services.AddTransient(); 

Configure中配置终结点路由

  1. app.UseEndpoints(endpoints => 
  2.     endpoints.MapControllers(); 
  3.  
  4.     var binging = new BasicHttpBinding(); 
  5.     binging.ReaderQuotas.MaxStringContentLength = int.MaxValue; 
  6.     endpoints.UseSoapEndpoint("/UserContractImpl.asmx", binging, SoapSerializer.DataContractSerializer); 
  7. }); 

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

WebApi程序客户端

新建dotnet5.0项目

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

输入url,点击go出来服务

下一步

最后一直下一步直到完成

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

ConfigureServices中注册

  1. services.AddSingleton(new UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding)); 

控制器注入

  1. private readonly UseService.UserContractImpl _userContractImpl; 
  2.  
  3. public HomeController( UseService.UserContractImpl userContractImpl) 
  4.     _userContractImpl = userContractImpl; 

使用里面的接口

  1. var result = await _userContractImpl.AddAsync(new UseService.AddUserVm 
  2.     Account = "123"
  3.     PassWord = "456"
  4.     Sex = UseService.SexEnum.Man 
  5. }); 
  6. var list = await _userContractImpl.GetListAsync(); 

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

控制台程序

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

事例一:直接构建UserContractImplClient

  1. var client = new UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding); 
  2. var str = await client.AddAsync(new AddUserVm 
  3.     Account = "23456"
  4.     PassWord = "456"
  5.     Sex = SexEnum.Noknow 
  6. }); 
  7. var list = client.GetListAsync(); 

事例二:

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

参考文档

 

https://github.com/DigDes/SoapCore

 

来源:鹏祥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯