.Net之SoapCore简单使用
最近在工作中,需要同時放出來WebAPI接口和支持Soap協議的WebService接口,在dotNetFramework時候玩過WebService,這可是好久沒再碰過了,沒想到現在居然遇到了。只好迎難而上。
介紹
本來是在ASP.NetCore中使用了組件SoapCore來使用Soap協議。
支持以下框架:
.NET 5.0(使用 ASP.NET Core 5.0)
.NET Core 3.1(使用 ASP.NET Core 3.1)
.NET Core 2.1(使用 ASP.NET Core 2.1)
.NET Standard 2.0(使用 ASP.NET Core 2.1)
官網:https://github.com/DigDes/SoapCore
操作
準備工作
為了省事,我還在之前的文章demo上面操作,地址是:https://gitee.com/AZRNG/my-example ,分支是:inmemory_soap ,當前項目已經包含一些WebAPI接口,我要實現使用Soap協議也放出這些接口,共用UserService類。
img開始編寫接口
環境:dotnet5.0 + SoapCore 1.1.0.10
安裝組件
<PackageReference?Include="SoapCore"?Version="1.1.0.10"?/>ConfigureServices中注入SoapCore
services.AddSoapCore();新建User WebService
///?<summary> ///?User?WebService ///?</summary> [ServiceContract] public?class?UserContractImpl {private?readonly?IUserService?_userService;private?readonly?IMapper?_mapper;public?UserContractImpl(IUserService?userService,IMapper?mapper){_userService?=?userService;_mapper?=?mapper;}///?<summary>///?查詢用戶列表///?</summary>///?<returns></returns>[OperationContract]public?async?Task<List<User>>?GetListAsync(){return?await?_userService.GetListAsync();}///?<summary>///?查詢詳情///?</summary>///?<param?name="id"></param>///?<returns></returns>[OperationContract]public?async?Task<User>?GetDetailsAsync(string?id){return?await?_userService.GetDetailsAsync(id);}///?<summary>///?添加///?</summary>///?<param?name="dto"></param>///?<returns></returns>[OperationContract]public?async?Task<string>?AddAsync(AddUserVm?dto){return?await?_userService.AddAsync(dto);}///?<summary>///?刪除///?</summary>///?<param?name="id"></param>[OperationContract]public?async?Task<int>?DeleteAsync(string?id){return??await?_userService.DeleteAsync(id);} }ConfigureServices中注入
services.AddTransient<UserContractImpl>();Configure中配置終結點路由
app.UseEndpoints(endpoints?=> {endpoints.MapControllers();var?binging?=?new?BasicHttpBinding();binging.ReaderQuotas.MaxStringContentLength?=?int.MaxValue;endpoints.UseSoapEndpoint<UserContractImpl>("/UserContractImpl.asmx",?binging,?SoapSerializer.DataContractSerializer); });訪問地址:http://localhost:5000/UserContractImpl.asmx
imgWebApi程序客戶端
新建dotnet5.0項目
img選中項目右鍵=>添加=>服務引用=>WCF Web Service
img輸入url,點擊go出來服務
img下一步
img最后一直下一步直到完成
img這個時候vs已經幫我們生成了調用的方法,后期地址有變動可以直接去修改這個代碼。
ConfigureServices中注冊
services.AddSingleton<UserContractImpl>(new?UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding));控制器注入
private?readonly?UseService.UserContractImpl?_userContractImpl;public?HomeController(?UseService.UserContractImpl?userContractImpl) {_userContractImpl?=?userContractImpl; }使用里面的接口
var?result?=?await?_userContractImpl.AddAsync(new?UseService.AddUserVm {Account?=?"123",PassWord?=?"456",Sex?=?UseService.SexEnum.Man }); var?list?=?await?_userContractImpl.GetListAsync();通過先調用添加接口然后調用查詢接口可以查詢到我們剛才添加到的數據。
控制臺程序
向上面一樣將Soap服務引用到項目中
事例一:直接構建UserContractImplClient
var?client?=?new?UserContractImplClient(UserContractImplClient.EndpointConfiguration.BasicHttpBinding); var?str?=?await?client.AddAsync(new?AddUserVm {Account?=?"23456",PassWord?=?"456",Sex?=?SexEnum.Noknow }); var?list?=?client.GetListAsync();事例二:
//?創建?HTTP?綁定對象 var?binding?=?new?BasicHttpBinding(); //?根據?WebService?的?URL?構建終端點對象 var?endpoint?=?new?EndpointAddress(@"http://localhost:5000/UserContractImpl.asmx"); //?創建調用接口的工廠,注意這里泛型只能傳入接口 var?factory?=?new?ChannelFactory<UserContractImplChannel>(binding,?endpoint); //?從工廠獲取具體的調用實例 var?callClient?=?factory.CreateChannel(); //?調用具體的方法,這里是 GetListAsync 方法。 var?result?=?await?callClient.GetListAsync();參考文檔
https://github.com/DigDes/SoapCore
總結
以上是生活随笔為你收集整理的.Net之SoapCore简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: System.Linq捉虫记 | 论变量
- 下一篇: iNeuOS工业互联网,增加一批PLC、