热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET Core项目中调用WebService的方法

这篇文章介绍了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里面定义的类名+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 = 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 调用方法2
            BasicHttpBinding 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;
            #endregion
            return $"HelloWorld方法返回值:{result1},TestMethod方法返回值:{result2}";
        }
    }
}

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

程序运行结果:

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

到此这篇关于ASP.NET Core项目调用WebService的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程笔记。


推荐阅读
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 基于Axis、XFire、CXF的webservice客户端调用示例
    本文介绍了如何使用Axis、XFire、CXF等工具来实现webservice客户端的调用,以及提供了使用Java代码进行调用的示例。示例代码中设置了服务接口类、地址,并调用了sayHello方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
author-avatar
rachel_wxh_614
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有