这篇文章将为大家详细讲解有关Asp。网络核心怎么调用WebService的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强> 0。使用背景强>
因为现在的项目都是基于。net核心的,但是某些需要调用第三方的WebService服务,故有了此文章。其基本思路是通过微软提供的Svcutil工具生成代理类,然后通过系统。ServiceModel来调用代理类所提供的对象与方法。
<强> 1。配置准备强>
1.1新建并编辑项目
首先新建一个新的。net核心控制台程序,通过命令行窗口或者Powershell执行以下命令新建一个项目。
dotnet new 控制台
然后编辑项目文件WebServiceConsole。csproj,并在其中加入以下内容:
& lt; ItemGroup> ,& lt; DotNetCliToolReference 包括=癲otnet-svcutil", Version=?.0 . *“,/比; & lt;/ItemGroup>
这样最终WebServiceConsole。csproj的内容会是这样子的。
& lt; Project Sdk=癕icrosoft.NET.Sdk"比; ,& lt; PropertyGroup> ,& lt; OutputType> Exe ,& lt; TargetFramework> netcoreapp2.1 ,& lt;/PropertyGroup> ,& lt; ItemGroup> ,& lt; DotNetCliToolReference 包括=癲otnet-svcutil", Version=?.0 . *“,/比; ,& lt;/ItemGroup> & lt;/Project>
继续打开命令行窗口或者Powershell执行以下命令,还原项目文件的包。
dotnet 恢复
1.2代理类生成
现在准备工作做好了,现在我们可以使用<代码> dotnet svcutil 代码>命令来生成代理类,或者你可以到WindowsSDKs的目录下找到svcutil。exe来执行代理类生成操作。
<代码> dotnet svcutil [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恢复> 代码来还原代理类当中所使用到的NuGet包。
<强> 2。调用WebService接口强>
生成代理类之后,重新打开项目,可以看到多了一个ServiceModel1的文件夹,在里面还有一个参考。cs的文件,这个文件里面的内容就是根据我们之前提供的Url生成的代理类了。
用法的话很简单,需要三步,在这里我直接在主()<代码> 代码>方法内部写调用方法了,注意这里基本上所有生成的方法都是异步方法。
using 系统; using System.ServiceModel; using System.Threading.Tasks; namespace WebServiceConsole { class 程序 ,{ ,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(绑定,端点);//,才能从工厂获取具体的调用实例 var 才能;callClient =, factory.CreateChannel ();//,才能调用具体的方法,这里是,sfexpressServiceAsync 方法。 var 才能;result =, await callClient.sfexpressServiceAsync (new sfexpressService ()); Console.ReadLine才能(); ,} ,} }
<强> 3。注意事项强>
报文长度问题,我在叫一个QAS服务时,因为报文过长,出过错误,所以报文长度最好手动设置一下,防止默认长度不够(默认长度我测试是65536年)。