最近在工作中,需要同时放出来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

.Net之SoapCore简单使用相关推荐

  1. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  2. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  3. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  4. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  5. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  6. 简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

    博客目录(阅读时间:10分钟) 一.win10 0.系统环境 1. win10配置golang环境 ①下载相关软件 ②创建gowork工作空间 ③配置环境变量(GOPATH+PATH) ④验证环境配置 ...

  7. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  8. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  9. java发送简单邮件_Java程序实现发送简单文本邮件

    /** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public  ...

最新文章

  1. python统计窗口函数怎么处理_python移动窗口函数
  2. 在 Windows 7 下安装 Hyper-V manager
  3. SpringBoot配置嵌入式Servlet容器
  4. Java反编译工具-JD-GUI解决直接打开.class文件卡顿问题
  5. C/C++调用Fortran的使用说明
  6. ldap seach java_从LDAP(Java)检索信息
  7. mysql update field_mysql-更新表与另一个选择,但字段是SUM(someField)
  8. python中selenium打开浏览器拿不到url_Selenium打开浏览器,但在Chrome和Firefox中都无法获取URL...
  9. c++ 走向高级之日积月累
  10. 信息学奥赛一本通(1152:最大数max(x,y,z))
  11. 14 PP配置-生产主数据-BOM相关-定义项目状态的缺省值
  12. 第5次作业+105032014040+薛龚
  13. 您不会相信Buzzfeed如何处理变更管理
  14. nvidia cuda工具包更新9.0版本记录
  15. js未知数加已知数的结果数,三者的每个数字不重复
  16. Java中Http连接的两种方式
  17. unity自带的方法
  18. 一个简单的dw网页制作作业,学生个人html静态网页制作成品代码——怪盗基德动漫主题网页成品(15页)
  19. DSP复习笔记(2)——TMS320F28335芯片内部结构
  20. python 等差数列list_python 等差数列末项计算方式

热门文章

  1. Shell 脚本——测试命令
  2. 捷径 - The certain shortcut
  3. pdf安装包_有么有pdf控件,不需要用户安装任何安装包直接打印的?
  4. Discrete Log Algorithms :Baby-step giant-step
  5. bzoj2460: [BeiJing2011]元素
  6. linux进阶命令2
  7. mysql 日期时间类型 自动转型 及 运算
  8. linux command1
  9. WCF中使用控件的委托,线程中的UI委托
  10. javascript的关于刷新页面给出提示框的代码