0.使用背景

因为现在的项目都是基于 .NET Core 的,但是某些需要调用第三方的 WebService 服务,故有了此文章。其基本思路是通过微软提供的 Svcutil 工具生成代理类,然后通过 System.ServiceModel 来调用代理类所提供的对象与方法。

1.配置准备

1.1 新建并编辑项目

首先新建一个新的 .NET Core 控制台程序,通过命令行窗口或者 Powershell 执行以下命令新建一个项目。

dotnet new console

然后编辑项目文件 WebServiceConsole.csproj ,并在其中加入以下内容:

<ItemGroup>
<DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
</ItemGroup>

这样最终 WebServiceConsole.csproj 的内容会是这样子的。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> <ItemGroup>
<DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
</ItemGroup>
</Project>

继续打开命令行窗口或者 Powershell 执行以下命令,还原项目文件的包。

dotnet restore

1.2 代理类生成

现在准备工作做好了,现在我们可以使用 dotnet svcutil 命令来生成代理类,或者你可以到 WindowsSDKs 的目录下找到 SvcUtil.exe 来执行代理类生成操作。

dotnet svcutil [WebService 地址]

上面是命令格式,比如说我这里有一个 WebService 提供的接口,其地址为 http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl ,那么我们需要打开命令行工具,执行以下命令来生成代理类。

dotnet svcutil http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl

成功之后会看到文件夹里面多了一个文件夹。

注意,在生成代理类之后,我们还需要再执行一次 dotnet restore 来还原代理类当中所使用到的 NuGet 包。

2.调用 WebService 接口

生成代理类之后,重新打开项目,可以看到多了一个 ServiceModel1 的文件夹,在里面还有一个 Reference.cs 的文件,这个文件里面的内容就是根据我们之前提供的 Url 生成的代理类了。

用法的话很简单,需要三步,在这里我直接在 Main() 方法内部写调用方法了,注意这里基本上所有生成的方法都是异步方法。

using System;
using System.ServiceModel;
using System.Threading.Tasks; namespace WebServiceConsole
{
class Program
{
static async Task Main(string[] args)
{
// 创建 HTTP 绑定对象
var binding = new BasicHttpBinding();
// 根据 WebService 的 URL 构建终端点对象
var endpoint = new EndpointAddress(@" http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl");
// 创建调用接口的工厂,注意这里泛型只能传入接口
var factory = new ChannelFactory<IExpressService>(binding, endpoint);
// 从工厂获取具体的调用实例
var callClient = factory.CreateChannel();
// 调用具体的方法,这里是 sfexpressServiceAsync 方法。
var result = await callClient.sfexpressServiceAsync(new sfexpressService()); Console.ReadLine();
}
}
}

3.参考资料:

[1]https://docs.microsoft.com/en-us/dotnet/core/additional-tools/dotnet-svcutil-guide

[2]https://www.jianshu.com/p/aae85122f20f?tdsourcetag=s_pctim_aiomsg

.NET Core 如何调用 WebService的更多相关文章

  1. ASP.NET Core教程:在ASP.NET Core中使用HttPClient调用WebService

    一.前言 在以前的一篇文章中,曾经讲述过如何在ASP.NET Core中调用WebService.但是那种方式是通过静态引用的方式去调用的,如果是在生产环境中,肯定不能使用这种方式去调用,幸运的是微软 ...

  2. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  3. .net core 调用webservice

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

  4. 在ASP.NET Core调用WebService

    一.前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码示例,这里不在讲解 ...

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

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

  6. Delphi调用WebService(通过SoapHeader认证)经验总结

    项目(Delphi开发)需要调用另一个系统的WebService.走了不少弯路,现记录总结一下经验.以下是WebService要求: 1.WebService概述 营销Webservice接口采用Ap ...

  7. AXIS2远程调用WebService示例(Eclipse+AXIS)

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html 我们将Web Service发布在Tomcat或者其他应 ...

  8. Java调用WebService方法总结(9,end)--Http方式调用WebService

    Http方式调用WebService,直接发送soap消息到服务端,然后自己解析服务端返回的结果,这种方式比较简单粗暴,也很好用:soap消息可以通过SoapUI来生成,也很方便.文中所使用到的软件版 ...

  9. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

随机推荐

  1. Redis学习笔记:与SpringBoot结合使用

    首先需要在pom文件中导入相应的Redis依赖(版本可以会变化,下面坐标也可能会变化) <dependency> <groupId>org.springframework.bo ...

  2. MySQL 1053错误 服务无法正常启动的解决方法

    MySQL 1053错误 服务无法正常启动的解决方法 1.右键我的电脑,管理,进入服务 2.右键单击Mysql8 属性,选择登陆  选择此账号  登陆管理员账号

  3. JS獲取URL的參數

    function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...

  4. windows kafka 环境搭建踩坑记

    版本介绍(64位): Windows 10 JDK1.8.0_171 zookeeper-3.4.8/ kafka_2.11-0.10.0.1.tgz 点击链接进行下载 1. JDK安装和环境搭建 自 ...

  5. 支持向量机(SVM)利用网格搜索和交叉验证进行参数选择

    上一回有个读者问我:回归模型与分类模型的区别在哪?有什么不同,我在这里给他回答一下 : : : : 回归问题通常是用来预测一个值,如预测房价.未来的天气情况等等,例如一个产品的实际价格为500元,通过 ...

  6. python语言相关语法基础

    numpy系列import numpya = numpy.array([[1,2], [3,4]])b = numpy.array([[5,6], [7,8]])a*b>>>arra ...

  7. Windows 注册表 16进制时间转换( Convert Reg_binary Time to a Datetime )

    背景: Windows注册表中,存在大量16进制的时间,以 reg_binary存储在注册表中. 例如: 0D 6C A4 4B 37 C5 CE 01 这种值日常报表中需要转换为适合人阅读的格式,实 ...

  8. forms组件

    昨日回顾: 批量插入数据: -queryset的方法:bulk_create(对象列表,数字(一次插入多少)) 分页器: from django.core.paginator import Pagin ...

  9. 如何下载官网上下载历史Java版本(老版本Java)

    首先先打开Oracle的官网    -->Oracle 然后选择Trials and Downloads 然后往下翻,选择java(JDK) 然后看到了这个,再往下翻 点他,然后就是选择你想下载 ...

  10. 【repost】图解Javascript上下文与作用域

    本文尝试阐述Javascript中的上下文与作用域背后的机制,主要涉及到执行上下文(execution context).作用域链(scope chain).闭包(closure).this等概念. ...