在Asp.Net Core调用WebSerivce
起因
在前一篇 在.Net Core调用WebService 博文中,尝试在.Net Core中使用WebService.主要是想迁移老项目. 是用命令行生成的WebSerivce代理类. 当时用VS2019(rc)预览版无法生成.才会在命令行中使用命令行手动生成的.前一段时间将VS2019升级正式版的.也没进行尝试.今天有时间,顺便在Asp.Net Core 测试一下.VS2019 正式版已经可以在VS中引用WebSerivce了.
1. 新建一个Asp.Net Core Web程序(用默认的模版)
新建Asp.Net Core MVC项目就不截图了.只截在VS2019如何引用WebSerivce/WCF.
选择WCF Web Service Reference
添加服务地址,并指定生成代理类的命名空间
不勾选 重新使用引用的程序集中的类型. 如果勾选会一直处于项目引用状态.
最后一步
2. 在Asp.Net Core MVC 使用WebSerivce
在Asp.Net Core MVC 要是不用依赖注入.要是不使用容器管理对象实例的生命周期,会显得你很low(开个玩笑). Asp.Net Core内置容器管理.由于这里只讲WebSerivce使用.不涉及太多的依赖注入的知识.在Startup.cs文件ConfigureServices函数中.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//注册一个 单例服务, WebSerivce的命令空间,这里不使用using
services.AddSingleton<qiufeng.webservice.WebService1Soap>(new qiufeng.webservice.WebService1SoapClient(qiufeng.webservice.WebService1SoapClient.EndpointConfiguration.WebService1Soap));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
3. 在Controller使用
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using qiufeng.webservice;
namespace qiufeng.webapp.Controllers
{
public class HomeController : Controller
{
private WebService1Soap _webService;
/// <summary>
/// 在构造函数注入实例
/// </summary>
/// <param name="serivce"></param>
public HomeController(WebService1Soap serivce)
{
_webService = serivce;
}
public async Task<string> Hello()
{
var x = await _webService.HelloWorldAsync(new HelloWorldRequest()); //通过实例,调用WebSerivce函数
string txt = x.Body.HelloWorldResult; //返回调用函数结果
return txt;
}
}
}
服务代码在.Net Core调用WebService ,这里就不展示了.
结果
想要迁移老项目,还需要更多的测试,也没有进行性能测试.主要是手头没有Linux,没法wrk去做压力测试.
秋风
2019-04-09