.NET Core 如何调用 WebService
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]
[2]
推荐阅读
-
浅谈如何在ASP.NET Core中实现一个基础的身份认证
-
谈谈如何在ASP.NET Core中实现CORS跨域
-
详解如何在ASP.NET Core中应用Entity Framework
-
详解如何在ASP.NET Core中使用Redis
-
.net core如何利用ConcurrentTest组件对方法进行压力测试详解
-
Asp.net Core中如何使用中间件来管理websocket
-
.NET Core WebApi中如何实现多态数据绑定实例代码
-
.NET Core/Framework如何创建委托大幅度提高反射调用的性能详解
-
Asp.Net Core控制器如何接收原始请求正文内容详解
-
详解ASP.NET Core应用中如何记录和查看日志