.NET Core 调用 WebService引用时出错

0.使用背景#
因为现在的项目都是基于 .NET Core 的,但是某些需要调用第三方的 WebService 服务。有些老的WebService接口在.NET Core中不能直接通过添加连接的服务进行引用,在引用时会出现各种奇葩报错,归根结底就是其文件下载不下来了,当初找了好久原因不知道怎么回事,最后看到一位大佬的博客找到了解决办法。其基本思路是通过微软提供的 Svcutil 工具生成代理类,然后通过 System.ServiceModel 来调用代理类所提供的对象与方法。此方法有一些局限性。如果Webservice接口更新的话不能即时更新,需要重新下载代理类,并且下载的代理类中的接口方法都是异步的。由于一直没有找到能在项目中直接引用的方法,所有只能先用此方法解决燃眉之急。如有博友有好的方法解决,望分享一下。

1.配置准备#
1.1 新建并编辑项目#
首先新建一个新的 .NET Core 控制台程序,通过命令行窗口或者 Powershell 执行以下命令新建一个项目。

dotnet new console

如果是在已有项目中操作,直接到项目要根目录打开Powershell即可。注意:最好无论是新建还是在现有项目操作,推荐已管理员方式打开Powershell

然后编辑项目文件 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 包。
在调用Webservice会发现缺少一些引用,通过nuget下载System.ServiceModel.Http进行安装即可

本文来源

原文地址:https://www.cnblogs.com/fcppl/p/13902694.html