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

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了營口免費建站歡迎大家使用!
介紹
本來是在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
操作
準備工作
為了省事,我還在之前的文章demo上面操作,地址是:https://gitee.com/AZRNG/my-example ,分支是:inmemory_soap ,當前項目已經(jīng)包含一些WebAPI接口,我要實現(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中配置終結點路由
- 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項目
選中項目右鍵=>添加=>服務引用=>WCF Web Service
輸入url,點擊go出來服務
下一步
最后一直下一步直到完成
這個時候vs已經(jīng)幫我們生成了調用的方法,后期地址有變動可以直接去修改這個代碼。
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();
通過先調用添加接口然后調用查詢接口可以查詢到我們剛才添加到的數(shù)據(jù)。
控制臺程序
向上面一樣將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();
事例二:
- // 創(chuàng)建 HTTP 綁定對象
- var binding = new BasicHttpBinding();
- // 根據(jù) WebService 的 URL 構建終端點對象
- var endpoint = new EndpointAddress(@"http://localhost:5000/UserContractImpl.asmx");
- // 創(chuàng)建調用接口的工廠,注意這里泛型只能傳入接口
- var factory = new ChannelFactory
(binding, endpoint); - // 從工廠獲取具體的調用實例
- var callClient = factory.CreateChannel();
- // 調用具體的方法,這里是 GetListAsync 方法。
- var result = await callClient.GetListAsync();
參考文檔
https://github.com/DigDes/SoapCore
本文名稱:.Net之SoapCore簡單使用
URL地址:http://www.5511xx.com/article/cdchosi.html


咨詢
建站咨詢
