最近工作需要同时发布WebAPI接口和支持Soap协议的WebService接口。在dotNetFramework的时候玩过WebService,好久没接触了。.只好迎难而上。介绍原来使用ASP.NetCore中的组件SoapCore来使用Soap协议。支持以下框架:.NET5.0(使用ASP.NETCore5.0).NETCore3.1(使用ASP.NETCore3.1).NETCore2.1(使用ASP.NETCore2.1).NETStandard2.0(使用ASP.NETCore2.1)官网:https://github.com/DigDes/SoapCore运行准备为了省事,我还是在上一篇文章的demo上运行,地址为:https://gitee.com/AZRNG/my-example,分支是:inmemory_soap,当前项目已经包含了一些WebAPI接口,我想使用Soap协议释放这些接口,共享UserService类。开始编写接口环境:dotnet5.0+SoapCore1.1.0.10安装组件创建一个新的用户WebService//////UserWebService///[ServiceContract]publicclassUserContractImpl{privatereadonlyIUserService_userService;privatereadonlyIMapper_mapper;publicUserContractImpl(IUserServiceuserService,IMappermapper){_userService=userService;_mapper=mapper;}//////查询用户列表//////[OperationContract]publicasyncTask>GetListAsync(){returnawait_userService.GetListAsync();}//////查询详情/////////[OperationContract]publicasyncTaskGetDetailsAsync(stringid){returnawait_userService.GetDetailsAsync(id);}//////Add/////////[OperationContract]publicasyncTaskAddAsync(AddUserVmdto){returnawait_userService.AddAsync(dto);}//////Delete//////[OperationContract]publicasyncTaskDeleteAsync(stringid){returnawait_userService.DeleteAsync(id);}}将services.AddTransient()注入ConfigureServices;在Configure中配置端点路由,SoapSerializer.DataContractSerializer);});访问地址:http://localhost:5000/UserContractImpl.asmxWebApi程序客户端新建dotnet5.0项目,选择项目右键=>添加=>服务引用=>WCFWeb服务输入url,点击go服务下一步,最后进入下一步直至完成,此时vs已经生成d我们的调用方法。如果后面地址有变化,可以直接修改这段代码。ConfigureServices中注册services.AddSingleton(newUserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding));控制器注入privatereadonlyUseService.UserContractImpl_userContractImpl;publicHomeController(UseService.UserContractImpluserContractImpl){_userContractImpl=userContractImpl;}使用里面的接口varresult=await_userContractImpl.AddAsync(newUseService.AddUserVm{Account="123",PassWord="456",Sex=UseService.SexEnum.Man});varlist=await_userContractImpl.GetListAsync();通过先调用添加接口,再调用查询接口,我们就可以查询到刚刚添加的数据了。控制台程序引用Soap服务到项目如上案例一:直接构建UserContractImplClientvarclient=newUserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding);varstr=awaitclient.AddAsync(newAddUserVm{Account="23456",PassWord="456",Sex=SexEnum.Noknow});varlist=client.GetListAsync();案例二://创建HTTP绑定对象varbinding=newBasicHttpBinding();//根据WebServiceURL构建端点对象varendpoint=newEndpointAddress(@"http://localhost:5000/UserContractImpl.asmx");//创建调用接口的工厂,这里注意泛型只能传入接口varfactory=newChannelFactory(binding,endpoint);//从工厂获取具体的调用实例varcallClient=factory.CreateChannel();//调用具体方法,这里是GetListAsync方法。varresult=awaitcallClient.GetListAsync();参考文档https://github.com/DigDes/SoapCore