ASP.NET|ASP.NET Core项目中调用WebService的方法
一、前言
现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码示例,这里不在讲解,下面我们讲解如何在ASP.NET Core项目里面调用WebService。首先我们需要创建一个WebService项目和一个ASP.NET Core WebApi项目。创建的WebService代码如下:
using System.Web.Services; namespace CoreCallWebServiceTest{/// /// CoreTest 的摘要说明/// [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"; }/// /// /// /// ///[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里面定义的类名+Soapvar factory = new ChannelFactory(binding, endpoint); //从工厂获取具体的调用实例var callClient = factory.CreateChannel(); //调用具体的方法,这里是 HelloWorldAsync 方法Task responseTask = callClient.HelloWorldAsync(new HelloWorldRequest()); //获取结果HelloWorldResponse response = responseTask.Result; // 获取HelloWorld方法的返回值string result1 = response.Body.HelloWorldResult; // 调用TestMethod方法,不传递参数Task testResponse = callClient.TestMethodAsync(new TestMethodRequest()); // 获取string result2 = testResponse.Result.Body.TestMethodResult; // 调用TestMethod方法,并传递参数TestMethodRequestBody body = new TestMethodRequestBody("测试TestMethod方法"); Task 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(binding, endpoint); ////从工厂获取具体的调用实例//var callClient = factory.CreateChannel(); ////调用具体的方法,这里是 HelloWorldAsync 方法//Task responseTask = callClient.HelloWorldAsync(new HelloWorldRequest()); ////获取结果//HelloWorldResponse response = responseTask.Result; //// 获取HelloWorld方法的返回值//string result1 = response.Body.HelloWorldResult; //// 调用TestMethod方法,不传递参数//Task testResponse = callClient.TestMethodAsync(new TestMethodRequest()); //// 获取//string result2 = testResponse.Result.Body.TestMethodResult; //// 调用TestMethod方法,并传递参数//TestMethodRequestBody body = new TestMethodRequestBody("测试TestMethod方法"); //Task testResponsePara = callClient.TestMethodAsync(new TestMethodRequest(body)); //// 获取//string result3 = testResponsePara.Result.Body.TestMethodResult; #endregion#region 调用方法2BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress address = new EndpointAddress("http://localhost:37907/CoreTest.asmx"); CoreTestSoapClient client = new CoreTestSoapClient(binding, address); Task responseTask = client.HelloWorldAsync(); HelloWorldResponse response = responseTask.Result; // 获取HelloWorld方法的返回值string result1 = response.Body.HelloWorldResult; // 调用TestMethod方法,这时必须传入参数Task testResponseTask = client.TestMethodAsync("测试TestMethod方法"); // 获取TestMethod方法的返回值string result2 = testResponseTask.Result.Body.TestMethodResult; #endregionreturn $"HelloWorld方法返回值:{result1},TestMethod方法返回值:{result2}"; }}}
在这种方式中,调用有参的方法必须要传递参数。
程序运行结果:
文章图片
如果以后WebService有更新,只需要更新添加的服务引用即可,如图所示:
文章图片
【ASP.NET|ASP.NET Core项目中调用WebService的方法】到此这篇关于ASP.NET Core项目调用WebService的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- SSM集成Thymeleaf
- 揭秘.NET|揭秘.NET Core剪裁器背后的技术
- angular动态表单
- BBS项目补充知识(后台文章展示功能)
- python|python 持续集成部署_Jenkins部署git+python项目实现持续集成
- java|秒杀项目(三)之商品展示&&CRUD
- 将本地SpringBoot项目发布到云服务器的方法
- .NET|.NET Core剪裁器Zack.DotNetTrimmer升级瘦身引擎,并支持剪裁计划的录制和回放
- yolo相关项目|基于人脸识别、姿态检测、距离估计的看电视姿态检测
- 抖音爆店码Java项目源代码