.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

安装组件

 
 
 
 
  1.  

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.     ///  
  20.     [OperationContract] 
  21.     public async Task> GetListAsync() 
  22.     { 
  23.         return await _userService.GetListAsync(); 
  24.     } 
  25.  
  26.     ///  
  27.     /// 查询详情 
  28.     ///  
  29.     ///  
  30.     ///  
  31.     [OperationContract] 
  32.     public async Task GetDetailsAsync(string id) 
  33.     { 
  34.         return await _userService.GetDetailsAsync(id); 
  35.     } 
  36.  
  37.     ///  
  38.     /// 添加 
  39.     ///  
  40.     ///  
  41.     ///  
  42.     [OperationContract] 
  43.     public async Task AddAsync(AddUserVm dto) 
  44.     { 
  45.         return await _userService.AddAsync(dto); 
  46.     } 
  47.  
  48.     ///  
  49.     /// 删除 
  50.     ///  
  51.     ///  
  52.     [OperationContract] 
  53.     public async Task 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

新闻标题:.Net之SoapCore简单使用
新闻来源:http://www.shufengxianlan.com/qtweb/news36/493486.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联