在Asp.NET Core中调用WebService的方法,可以通过多种方式实现,下面将详细介绍如何在ASP.NET Core项目中调用WebService的方法。

一、前言
现实生产中,有一些比较老的系统对外提供的接口都是WebService形式的,如果是使用.NET Framework创建的项目调用WebService非常方便,网上有很多代码示例,下面我们讲解如何在ASP.NET Core项目里面调用WebService,首先我们需要创建一个WebService项目和一个ASP.NET Core WebApi项目。
二、引用WebService
1、添加服务引用:在ASP.NET Core WebApi项目中右键点击“依赖项”,选择“添加连接的服务”。
2、选择WCF Web Service Referenct Provider:在弹出的窗口中选择“Microsoft WCF Web Service Referenct Provider”。
3、配置服务引用:输入WebService的URL并点击下一步,去掉重新使用引用的程序集中的类型签名的复选框,如果不去掉复选框,生成的时候可能会报错,直接点击“完成”按钮即可,等待配置完成后,会在项目中添加相应的服务引用。
三、在代码中调用WebService
1. 添加控制器
我们添加一个名为Test的控制器,里面有一个Get方法,返回WebService里面两个方法的返回值,代码如下:
using System.ServiceModel;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using TestWebService;
namespace AspNetCoreDemo.Controllers
{
[Route("api/Test")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public string Get()
{
// 创建 HTTP 绑定对象
var binding = new BasicHttpBinding();
// 根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
var endpoint = new EndpointAddress(@"http://localhost:37907/CoreTest.asmx");
// 创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
var factory = new ChannelFactory<CoreTestSoap>(binding, endpoint);
// 从工厂获取具体的调用实例
var callClient = factory.CreateChannel();
// 调用具体的方法,这里是 HelloWorldAsync 方法
Task<HelloWorldResponse> responseTask = callClient.HelloWorldAsync(new HelloWorldRequest());
// 获取结果
HelloWorldResponse response = responseTask.Result;
// 获取HelloWorld方法的返回值
string result1 = response.Body.HelloWorldResult;
// 调用TestMethod方法,不传递参数
Task<TestMethodResponse> testResponse = callClient.TestMethodAsync(new TestMethodRequest());
// 获取
string result2 = testResponse.Result.Body.TestMethodResult;
// 调用TestMethod方法,并传递参数
TestMethodRequestBody body = new TestMethodRequestBody("测试TestMethod方法");
Task<TestMethodResponse> testResponsePara = callClient.TestMethodAsync(body);
// 获取
string result3 = testResponsePara.Result.Body.TestMethodResult;
return $"HelloWorld方法返回值: {result1}, TestMethod方法返回值: {result2}, TestMethod带参数方法返回值: {result3}";
}
}
}
2. 配置服务***扩展
在Startup.cs文件中注册WebService服务:

public static class WebServiceCollectionExtensions
{
public static void ConfigureWebServices(this IServiceCollection services)
{
services.AddSingleton<ASoap>(new ASoapClient(ASoapClient.EndpointConfiguration.ASoapSoap));
}
}
3. 调用服务方法
在控制器中使用注入的WebService客户端调用远程方法:
using Microsoft.Extensions.DependencyInjection;
using Demo.Services;
using Microsoft.AspNetCore.Mvc;
namespace Demo.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class WebServiceController : ControllerBase
{
private readonly ASoap _aSoap;
public WebServiceController(IServiceProvider serviceProvider)
{
_aSoap = serviceProvider.GetService<ASoap>();
}
[HttpGet]
public async Task<IActionResult> UpdateAppointment()
{
await _aSoap.UpdateAppointmentAsync();
return Ok();
}
}
}
通过上述步骤,我们可以在ASP.NET Core项目中成功调用WebService的方法,以下是一些需要注意的地方:
确保WebService的URL正确且可访问。
在调用异步方法时,注意处理异步操作的结果。
如果遇到类型签名问题,可以尝试去掉重新使用引用的程序集中的类型签名的复选框。
在生产环境中,建议使用HttpClient来代替静态引用的方式调用WebService。
相关问题与解答
Q1: 如何在ASP.NET Core中通过HttpClient调用WebService?

A1: 可以通过以下步骤使用HttpClient调用WebService:
1、在ASP.NET Core WebApi项目中安装HttpClient包。
2、在Startup.cs文件中配置HttpClient服务。
3、在控制器中使用HttpClient发送请求并接收响应。
Q2: 如何处理WebService调用中的异常?
A2: 在调用WebService时,可以使用try-catch块来捕获和处理异常。
try
{
// 调用WebService方法
}
catch (Exception ex)
{
// 处理异常,记录日志或返回错误信息
}
小伙伴们,上文介绍了“Asp.NET Core 如何调用WebService的方法”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。