.NETCore如何调⽤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 的⽬录下到 来执⾏代理类⽣成操作。
dotnet svcutil [WebService 地址]
dotnet svcutil localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](localhost:3000/bsp-oisp/ws/sfexpressService?wsdl
调用webservice服务成功之后会看到⽂件夹⾥⾯多了⼀个⽂件夹。
注意,在⽣成代理类之后,我们还需要再执⾏⼀次 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(@" localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](localhost:3000/bsp-oisp/ws/sfexpr essService?wsdl");
// 创建调⽤接⼝的⼯⼚,注意这⾥泛型只能传⼊接⼝
var factory = new ChannelFactory<IExpressService>(binding, endpoint);
// 从⼯⼚获取具体的调⽤实例
var callClient = factory.CreateChannel();
// 调⽤具体的⽅法,这⾥是 sfexpressServiceAsync ⽅法。
var result = await callClient.sfexpressServiceAsync(new sfexpressService());
Console.ReadLine();
}
}
}
3.参考资料:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论