• .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]https://docs.microsoft.com/en-us/dotnet/core/additional-tools/dotnet-svcutil-guide

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

  • 相关阅读:
    异地多活(异地双活)实践经验
    申诉受理
    申诉受理
    关于数据采集需求的讨论帖
    Http压测工具wrk使用指南
    设计爬虫Hawk背后的故事
    APP接口版本兼容的问题
    .net点选验证码实现思路分享
    央企晒年薪 现在终于有机会看到了_青新闻__中国青年网
    蘑菇街电商交易平台服务架构及改造优化历程(含PPT)
  • 原文地址:https://www.cnblogs.com/myzony/p/9547254.html
Copyright © 2020-2023  润新知