一、前言

现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码示例,这里不在讲解,下面我们讲解如何在ASP.NET Core项目里面调用WebService。首先我们需要创建一个WebService项目和一个ASP.NET Core WebApi项目。创建的WebService代码如下:

using System.Web.Services;

namespace CoreCallWebServiceTest
{
/// <summary>
/// CoreTest 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
public class CoreTest : System.Web.Services.WebService
{ [WebMethod]
public string HelloWorld()
{
return "Hello World";
} /// <summary>
///
/// </summary>
/// <param name="para"></param>
/// <returns></returns>
[WebMethod]
public string TestMethod(string para)
{
return $"输入参数:{para}";
}
}
}

里面分别有一个无参和有参的方法。我们在ASP.NET Core WebApi项目里面分别调用这两个方法并输出。

二、引用WebService

首先我们在创建好的ASP.NET Core WebApi项目里面添加WebService的引用。

1、在依赖项上面右键,选择“添加连接的服务”,如图所示:

2、选择“Microsoft WCF Web Service Referenct Provider”,如图所示:

3、添加服务引用。如图所示:

配置完以后,点击“下一步”,去掉重新使用引用的程序集中的类型签名的复选框。如果不去掉复选框,生成的时候可能会报错。

直接点击“完成”按钮即可。慢慢等待配置完成:

配置完成界面如图所示:

这样就添加完了,下面开始在代码里面调用提供的WebService里面的方法。

三、在代码中调用WebService

我们添加一个名为Test的控制器,里面有一个Get方法,返回WebService里面两个方法的返回值,代码如下:

using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using TestWebService; namespace AspNetCoreDemo.Controllers
{
[Route("api/Test")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public string Get()
{
//创建 HTTP 绑定对象
var binding = new BasicHttpBinding();
//根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
var endpoint = new EndpointAddress(@"http://localhost:37907/CoreTest.asmx");
//创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
var factory = new ChannelFactory<CoreTestSoap>(binding, endpoint);
//从工厂获取具体的调用实例
var callClient = factory.CreateChannel();
//调用具体的方法,这里是 HelloWorldAsync 方法
Task<HelloWorldResponse> responseTask = callClient.HelloWorldAsync(new HelloWorldRequest());
//获取结果
HelloWorldResponse response = responseTask.Result;
// 获取HelloWorld方法的返回值
string result1 = response.Body.HelloWorldResult; // 调用TestMethod方法,不传递参数
Task<TestMethodResponse> testResponse = callClient.TestMethodAsync(new TestMethodRequest());
// 获取
string result2 = testResponse.Result.Body.TestMethodResult; // 调用TestMethod方法,并传递参数
TestMethodRequestBody body = new TestMethodRequestBody("测试TestMethod方法");
Task<TestMethodResponse> testResponsePara = callClient.TestMethodAsync(new TestMethodRequest(body));
// 获取
string result3 = testResponse.Result.Body.TestMethodResult; return $"HelloWorld方法返回值:{result1},TestMethod方法不传递参数返回值:{result2},TestMethod方法传递参数的返回值:{result3}";
}
}
}

我们在WebService里面定义的TestMethod方法有一个string类型的参数,调用的时候有两个重载函数,一个无参,一个有参,看一下自动生成的Reference.cs类里面的代码:

发现TestMethodRequestBody有两个构造函数:一个无参,一个有参。我们在浏览器里面调用Get方法,程序输出结果:

除了上面的代码,也可以使用下面的代码进行调用:

using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using TestWebService; namespace AspNetCoreDemo.Controllers
{
[Route("api/Test")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public string Get()
{
#region 调用方法1
////创建 HTTP 绑定对象
//var binding = new BasicHttpBinding();
////根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
//var endpoint = new EndpointAddress(@"http://localhost:37907/CoreTest.asmx");
////创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
//var factory = new ChannelFactory<CoreTestSoap>(binding, endpoint);
////从工厂获取具体的调用实例
//var callClient = factory.CreateChannel();
////调用具体的方法,这里是 HelloWorldAsync 方法
//Task<HelloWorldResponse> responseTask = callClient.HelloWorldAsync(new HelloWorldRequest());
////获取结果
//HelloWorldResponse response = responseTask.Result;
//// 获取HelloWorld方法的返回值
//string result1 = response.Body.HelloWorldResult; //// 调用TestMethod方法,不传递参数
//Task<TestMethodResponse> testResponse = callClient.TestMethodAsync(new TestMethodRequest());
//// 获取
//string result2 = testResponse.Result.Body.TestMethodResult; //// 调用TestMethod方法,并传递参数
//TestMethodRequestBody body = new TestMethodRequestBody("测试TestMethod方法");
//Task<TestMethodResponse> testResponsePara = callClient.TestMethodAsync(new TestMethodRequest(body));
//// 获取
//string result3 = testResponsePara.Result.Body.TestMethodResult;
#endregion #region 调用方法2
BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress address = new EndpointAddress("http://localhost:37907/CoreTest.asmx"); CoreTestSoapClient client = new CoreTestSoapClient(binding, address); Task<HelloWorldResponse> responseTask = client.HelloWorldAsync();
HelloWorldResponse response = responseTask.Result;
// 获取HelloWorld方法的返回值
string result1 = response.Body.HelloWorldResult; // 调用TestMethod方法,这时必须传入参数
Task<TestMethodResponse> testResponseTask = client.TestMethodAsync("测试TestMethod方法");
// 获取TestMethod方法的返回值
string result2 = testResponseTask.Result.Body.TestMethodResult;
#endregion
return $"HelloWorld方法返回值:{result1},TestMethod方法返回值:{result2}";
}
}
}

在这种方式中,调用有参的方法必须要传递参数。

程序运行结果:

如果以后WebService有更新,只需要更新添加的服务引用即可,如图所示:

在ASP.NET Core调用WebService的更多相关文章

  1. .net core 调用webservice

    原文:.net core 调用webservice 1.点击core项目添加链接的服务 2.键入对应的webservice地址,下载对应的代理服务 4.由于.net core  代理类只支持异步方法  ...

  2. ASP.net jQuery调用webservice返回json数据的一些问题

    之前寒假时,试着使用jQuery写了几个异步请求demo, 但是那样是使用的webform普通页面,一般应该是用 webservice 居多. 最近写后台管理时,想用异步来实现一些信息的展示和修改, ...

  3. Asp.Net Core 调用第三方Open API查询物流数据

    在我们的业务中不可避免要与第三方的系统进行交互,调用他们提供的API来获取相应的数据,那么对于这样的情况该怎样进行处理呢?下面就结合自己对接跨越速运接口来获取一个发运单完整的物流信息为例来说明如何在A ...

  4. 在ASP.NET 中调用 WebService 服务

    一.webservice定义 详见 https://www.cnblogs.com/phoebes/p/8029464.html 二.在ASP.NET MVC 中调用 webservice 1:要调用 ...

  5. Asp.net动态调用WebService

    Public Class WebServiceHelper #Region "InvokeWebService" '动态调用web服务 Public Shared Function ...

  6. ASP.NET定时调用WebService 运行后台代码

    效果: 通过在网站的Global.asax的Application_Start方法中 加入定时器 定时调用WebService 该WebService的一个方法 负责在后台 向数据库的某个表加入数据 ...

  7. .net core 调用webservice同步方法

    更新VS2019 16.1版本 支持WebService同步调用 在连接服务中->选择客户端选项->Generate Synchronout Operations选择划勾   生成同步操作 ...

  8. Fiddler捕捉ASP.NET WebSite调用WebService、WCF服务

    Fiddler默认会注册一个代理,有时会发现WebSite调用的WebService或者WCF服务无法被捕捉到.其实是由于运行的站点关联的应用程序池使用的账号和我们当前登陆操作系统的用户不同,自然它们 ...

  9. ASP.NET JS调用WebService——简单例子

    一.创建好WebService 二.编辑页面与js 三. 运行页面并点击按钮,结果如下 简单调用吧!

随机推荐

  1. CVE-2017-12615 Tomcat远程代码执行

    影响版本: Apache Tomcat 7.0.0 - 7.0.81 ps:安装Tomcat需要安装jdk(JAVA环境) 下面来正经复现,Payload: 利用burpsuite 进行抓包 发送到r ...

  2. YAOI Round #1 题解

    前言 比赛网址:http://47.110.12.131:9016/contest/3 总体来说,这次比赛是有一定区分度的, \(\text{ACM}\) 赛制也挺有意思的. 题解 A. 云之彼端,约 ...

  3. 深度解析CSS中的单位以及区别

    css中有几个不同的单位表示长度,使用时数字加单位.如果长度为0,则可以省略单位. 长度单位可分为两种类型:相对和绝对. 绝对长度 绝对长度单位是一个固定的值,反应真实的物理尺寸,不依赖于显示器.分辨 ...

  4. redis反向代理docker容器中的rabbit mq服务

    最近做的项目中用到了docker,发现docker容器还真挺好用的,可以统一来管理各种资源,项目. 但是在实际使用中就碰到下面这个问题(下面所有的应用都是在docker中启动的): 通过nginx来反 ...

  5. Beautifulsoup网页解析——爬取豆瓣排行榜分类接口

    我们在网页爬取的过程中,会通过requests成功的获取到所需要的信息,而且,在返回的网页信息中,也是通过HTML代码的形式进行展示的.HTML代码都是通过固定的标签组合来实现页面信息的展示,所以,最 ...

  6. Leetcode12. 整数转罗马数字Leetcode18. 四数之和

    > 简洁易懂讲清原理,讲不清你来打我~ 输入整数,输出对应的罗马字符串![在这里插入图片描述](https://img-blog.csdnimg.cn/54b001c62a0d4d348c962 ...

  7. Linux虚拟机扩展磁盘

    Linux虚拟机扩展磁盘 1.虚拟机关机,Vmware中扩展磁盘 2.虚拟机开机,查看磁盘大小 [root@hadoop6 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmp ...

  8. 【洛谷P4933 大师】动态规划

    题目描述 ljt12138首先建了n个特斯拉电磁塔,这些电塔排成一排,从左到右依次标号为1到n,第i个电塔的高度为h[i]. 建筑大师需要从中选出一些电塔,然后这些电塔就会缩到地下去.这时候,如果留在 ...

  9. LinuxMint 19/Ubuntu 19.10重置开始菜单以及任务栏

    ====================== 问题:任务栏以及开始菜单弄不见了 解决方法: 快捷键打开终端,输入重置命令: dconf reset -f /

  10. charles f配置sslproxy 对protobuf 接口抓包 -不推荐

    charles 配置sslproxy help-安装电脑证书 手机连接访问电脑,下载允许手机 手机连接vpn 手机访问chls.pro/ssl -下载证书 request可以看到protobuf_tx ...