Asp。网络核心怎么调用WebService的方法

  介绍

这篇文章将为大家详细讲解有关Asp。网络核心怎么调用WebService的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> 0。使用背景

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

<强> 1。配置准备

1.1新建并编辑项目

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

dotnet  new 控制台

 Asp。网络核心怎么调用WebService的方法

然后编辑项目文件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 恢复

 Asp。网络核心怎么调用WebService的方法

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

 Asp。网络核心怎么调用WebService的方法

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

注意,在生成代理类之后,我们还需要再执行一次<代码> dotnet恢复>

<强> 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年)。

Asp。网络核心怎么调用WebService的方法