新聞中心
最近在工作中,需要同時(shí)放出來WebAPI接口和支持Soap協(xié)議的WebService接口,在dotNetFramework時(shí)候玩過WebService,這可是好久沒再碰過了,沒想到現(xiàn)在居然遇到了。只好迎難而上。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了營口免費(fèi)建站歡迎大家使用!
介紹
本來是在ASP.NetCore中使用了組件SoapCore來使用Soap協(xié)議。
支持以下框架:
- .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)
官網(wǎng):https://github.com/DigDes/SoapCore
操作
準(zhǔn)備工作
為了省事,我還在之前的文章demo上面操作,地址是:https://gitee.com/AZRNG/my-example ,分支是:inmemory_soap ,當(dāng)前項(xiàng)目已經(jīng)包含一些WebAPI接口,我要實(shí)現(xiàn)使用Soap協(xié)議也放出這些接口,共用UserService類。
開始編寫接口
環(huán)境:dotnet5.0 + SoapCore 1.1.0.10
安裝組件
ConfigureServices中注入SoapCore
- services.AddSoapCore();
新建User WebService
- ///
- /// User WebService
- ///
- [ServiceContract]
- public class UserContractImpl
- {
- private readonly IUserService _userService;
- private readonly IMapper _mapper;
- public UserContractImpl(IUserService userService,
- IMapper mapper)
- {
- _userService = userService;
- _mapper = mapper;
- }
- ///
- /// 查詢用戶列表
- ///
- ///
- [OperationContract]
- public async Task
> GetListAsync()
- {
- return await _userService.GetListAsync();
- }
- ///
- /// 查詢詳情
- ///
- ///
- ///
- [OperationContract]
- public async Task
GetDetailsAsync(string id) - {
- return await _userService.GetDetailsAsync(id);
- }
- ///
- /// 添加
- ///
- ///
- ///
- [OperationContract]
- public async Task
AddAsync(AddUserVm dto) - {
- return await _userService.AddAsync(dto);
- }
- ///
- /// 刪除
- ///
- ///
- [OperationContract]
- public async Task
DeleteAsync(string id) - {
- return await _userService.DeleteAsync(id);
- }
- }
ConfigureServices中注入
- services.AddTransient();
Configure中配置終結(jié)點(diǎn)路由
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapControllers();
- var binging = new BasicHttpBinding();
- binging.ReaderQuotas.MaxStringContentLength = int.MaxValue;
- endpoints.UseSoapEndpoint
("/UserContractImpl.asmx", binging, SoapSerializer.DataContractSerializer); - });
訪問地址:http://localhost:5000/UserContractImpl.asmx
WebApi程序客戶端
新建dotnet5.0項(xiàng)目
選中項(xiàng)目右鍵=>添加=>服務(wù)引用=>WCF Web Service
輸入url,點(diǎn)擊go出來服務(wù)
下一步
最后一直下一步直到完成
這個(gè)時(shí)候vs已經(jīng)幫我們生成了調(diào)用的方法,后期地址有變動(dòng)可以直接去修改這個(gè)代碼。
ConfigureServices中注冊
- services.AddSingleton
(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();
通過先調(diào)用添加接口然后調(diào)用查詢接口可以查詢到我們剛才添加到的數(shù)據(jù)。
控制臺程序
向上面一樣將Soap服務(wù)引用到項(xiàng)目中
事例一:直接構(gòu)建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();
事例二:
- // 創(chuàng)建 HTTP 綁定對象
- var binding = new BasicHttpBinding();
- // 根據(jù) WebService 的 URL 構(gòu)建終端點(diǎn)對象
- var endpoint = new EndpointAddress(@"http://localhost:5000/UserContractImpl.asmx");
- // 創(chuàng)建調(diào)用接口的工廠,注意這里泛型只能傳入接口
- var factory = new ChannelFactory
(binding, endpoint); - // 從工廠獲取具體的調(diào)用實(shí)例
- var callClient = factory.CreateChannel();
- // 調(diào)用具體的方法,這里是 GetListAsync 方法。
- var result = await callClient.GetListAsync();
參考文檔
https://github.com/DigDes/SoapCore
名稱欄目:.Net之SoapCore簡單使用
網(wǎng)址分享:http://www.dlmjj.cn/article/cdchosi.html


咨詢
建站咨詢
