使用SoapCore实现在.net core平台下开发webservice;以及使用HttpClientFactory动态访问webservice。

首先,需要在包项目下面引用SoapCore:

然后新建项目Wsk.Core.WebService,用于开发webservice有关功能。

新项目下,需要先引用package项目,然后新建一个IWeskyWS接口,以及提供了三个Hello方法(webservice有可能不支持重载,如果后面无法进行服务引用,可以更改为Hello1,Hello2,Hello3),用于实验使用。其他介绍,如下图标注所示:

该部分代码:

[ServiceContract]
public interface IWeskyWS
{
[OperationContract]
string Hello1();
[OperationContract]
string Hello2(string name);
[OperationContract]
string Hello3(NameInfo info);
} public class WeskyWS : IWeskyWS
{
public string Hello1()
{
return "Hello";
}
public string Hello2(string name)
{
return $"Hello, {name}";
}
public string Hello3(NameInfo info)
{
return $"Hello,{info.Name}, Age is {info.Age}";
}
} [DataContract]
public class NameInfo
{
[DataMember]
public int Age { get; set; }
[DataMember]
public string Name { get; set; }
}

现在转到启动项目下,引用该项目。然后在启动项里面,添加服务注入:

在Configure下,添加UseSoapEndpoint,以及有关注释,如图注释部分:

启动程序,并且在浏览器下指定对应的asmx地址,如果有提示下方的xml文档,则代表启动成功。

现在咱们新建一个基于.net framework的控制台项目,用来做测试使用。

创建完毕以后,结构如下:

现在通过引用服务的方式进行引用一下:

在Main方法下面调用webservice,并打印,结果如下:

注意有个坑:使用SoapCore开发的该Webservice,目前只能通过添加服务引用的方式被识别。使用动态访问方式,会无法访问。如果其他小伙伴解决了该问题,欢迎留言。

接下来提供一个简单的使用.net core通过HttpClientFactory来访问Webservice的方法。

注意还有一个坑:该方法目前仅针对于webservice方法参数不存在实体类的情况下。如果是复杂数据,目前暂时不支持,或者是我当前未找到行之有效的方法,也欢迎各位大佬留言评论,提供更加有效的法子。

由于上面使用soapCore开发的webservice目前只能被服务引用,所以此处不对其做动态访问测试有兴趣的可以自行尝试。我先创建一个使用.net framework开发的webservice。

新建一个Asp.Net Web应用程序,配置如下图:

创建以后,添加一个新建项,选择web服务,用以开发webservice测试方法:

创建成功,以后,结构如下图,以及会有一个默认的HelloWorld方法。

现在加点测试方法,带一个参数的Hello1,以及带两个参数的Hello2:

运行以后,如果有以下页面,说明该webservice开发成功:

现在切换回Wsk.Core项目,在启动项目的控制器里面,新建一个webapi,,用来触发访问webservice的方法,进行有关验证。先添加HttpClientFactory的依赖注入:

在此之前,还需要在启动项里面,添加对HttpClient的注册:

现在在新增的webapi里面,做一些访问webservice的实现。先新建一个动态访问webservice的方法:

方法代码:

  private  String CallWebservice(string url, Dictionary<string, string> dictionary)
{
HttpContent content;
if (dictionary != null)
{
content = new FormUrlEncodedContent(dictionary);
}
else
{
content = new StringContent("");
} string result = string.Empty; try {
using (HttpClient client = _httpClientFactory.CreateClient()) {
using (var response = client.PostAsync(url,content).Result) {
if(response.StatusCode == System.Net.HttpStatusCode.OK)
{
result = response.Content.ReadAsStringAsync().Result; //XmlDocument xml = new XmlDocument();
//xml.LoadXml(result);
//result = xml.InnerText;
}
}
}
}
catch(Exception ex)
{
result = $"Error:{ex.Message}";
}
return result;
}

其中,注释部分是用于获取xml内数据使用的,为了看完整的数据,所以做了注释。有兴趣的可以打开注释进行尝试。

然后在TestCallWS这个api下面对以上三个webservice方法进行访问:

该webapi代码:

 [HttpPost]
public IActionResult TestCallWS()
{ string url = "http://localhost:8435/WeskyService.asmx/"; string method = "HelloWorld";
string wsUrl = $"{url}{method}";
string value1 = CallWebservice(wsUrl, null); Dictionary<string, string> dic = new Dictionary<string, string>(); method = "Hello1";
wsUrl = $"{url}{method}";
dic.Add("name", "Wesky");
string value2 = CallWebservice(wsUrl, dic); dic = new Dictionary<string, string>();
method = "Hello2";
wsUrl = $"{url}{method}";
dic.Add("age", "3");
dic.Add("name", "WESKY");
string value3 = CallWebservice(wsUrl, dic); return Ok($"{value1}\n{value2}\n{value3}");
}

启动程序,并且在swagger上面进行调用,看看结果:

访问成功,教程结束。

以上写法也不是最好的写法,以及使用.net core开发webservice如何能够被动态访问、以及在.net core上如何动态访问带实体参数的方法,目前还需要进一步探讨。也欢迎大佬们踊跃提供可行的技术方向。感谢大家抽时间看完该文章,希望对大家能有一点帮助。

先前也有一期使用HttpClient和HttpWebRequest进行访问webapi的文章,如果有兴趣也可以莅临指导:https://www.cnblogs.com/weskynet/p/14856130.html

到此完毕,谢谢观看。

十九、.net core使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问webservice接口的更多相关文章

  1. Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

    前言 之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式:虽然注解方式干掉了 xml 文件,但是使用起来并不 ...

  2. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  3. 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 前一篇文章 ...

  4. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  5. 第十九章、Model/View开发:QTableView的功能及属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Designer的部件栏Item Views中提供了PyQt和Qt已经实现好的table ...

  6. JMeter学习(二十九)自动化badboy脚本开发技术(转载)

    转载自 http://www.cnblogs.com/yangxia-test 一般人用badboy都是使用它的录制功能,其它badboy还是一款自动化的工具,它可以实现检查点.参数化.迭代.并发.报 ...

  7. 动态调用WebService 通用方法Moss 中 传统开发中都可用。

    WebService是啥大家都知道了,这里不做过多的解释.通常我们使用WebService的做法基本都是在我们的项目中添加Web引用的方式,首先找到WebService的地址,然后定义命名空间,这样会 ...

  8. 循序渐进学.Net Core Web Api开发系列【0】:序言与目录

    一.序言 我大约在2003年时候开始接触到.NET,最初在.NET framework 1.1版本下写过代码,曾经做过WinForm和ASP.NET开发.大约在2010年的时候转型JAVA环境,这么多 ...

  9. 循序渐进学.Net Core Web Api开发系列【3】:WebApi开发概览

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 目前我们已 ...

随机推荐

  1. 在react中使用redux并实现计数器案例

    React + Redux 在recat中不使用redux 时遇到的问题 在react中组件通信的数据是单向的,顶层组件可以通过props属性向下层组件传递数据,而下层组件不能向上层组件传递数据,要实 ...

  2. week-03

    1.简述HTTP交互原理 1.浏览器分析输入访问的地址 域名(IP)+$uri 2.读取浏览器缓存 3.请求DNS服务器,解析域名,返回IP 4.建立TCP连接,三次握手 5.发送请求 6.接收返回请 ...

  3. Go语言web开发---Beego基础

    一.框架 框架:可复用的设计组件,它规定了应用的体系结构,明确了整个设计,协作各个组件之间的依赖关系,责任分配,和流程控制.通俗解释框架就是一堆代码的集合,为了提高软件的开发效率和质量,一般都会使用框 ...

  4. mybatis-plus 分页查询+ dao层抽象

    1.配置文件添加paginationInterceptor @Configuration @MapperScan("fama.cost.*.mapper") public clas ...

  5. Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源

    一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...

  6. 构建编译TVM方法

    构建编译TVM方法 本文提供如何在各种系统上构建和安装TVM包的说明.它包括两个步骤: 1.     首先从C代码构建共享库( libtvm.so for linux, libtvm.dylib fo ...

  7. 深度学习编译与优化Deep Learning Compiler and Optimizer

    深度学习编译与优化Deep Learning Compiler and Optimizer

  8. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使 用节点表示抽象的数学计算,并使用 OP 表达计算的逻 ...

  9. 牛客网sql实战参考答案(mysql版):16-21

    16.统计出当前(titles.to_date='9999-01-01')各个title类型对应的员工当前(salaries.to_date='9999-01-01')薪水对应的平均工资.结果给出ti ...

  10. jquery给动态生成的元素绑定事件,on函数

    首先先解释一下什么是动态生成的元素:动态生成的元素即我们用jquery的内部插入函数append()所生成的html代码.相对的也有静态生成的元素:即直接编写在页面的html代码. 下面通过例子来讲解 ...