在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.
在VS2019引用WebSerivce服务
选择WCF Web Service Reference
选择WCF Web Service Reference
添加服务地址,并指定生成代理类的命名空间
输入WebSerivce地址url,点击转到
不勾选 重新使用引用的程序集中的类型.  如果勾选会一直处于项目引用状态.
不勾选重新使用引用的程序集中的类型
最后一步

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 ,这里就不展示了.

结果

在asp.net core MVC调用WebSerivce成功
想要迁移老项目,还需要更多的测试,也没有进行性能测试.主要是手头没有Linux,没法wrk去做压力测试.
秋风 2019-04-09