網站首頁 編程語言 正文
一、創建WebService
我們使用VS創建一個WebService,增加一個PostTest方法,方法代碼如下
using System.Web.Services; namespace WebServiceDemo { /// <summary> /// WebTest 的摘要說明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消注釋以下行。 // [System.Web.Script.Services.ScriptService] public class WebTest : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] public string PostTest(string para) { return $"返回參數{para}"; } } }
創建完成以后,我們發布WebService,并部署到IIS上面。保證可以在IIS正常瀏覽。
二、使用HttpClient調用WebService
我們使用VS創建一個ASP.NET Core WebAPI項目,由于是使用HttpClient,首先在ConfigureServices方法中進行注入
public void ConfigureServices(IServiceCollection services) { // 注入HttpClient services.AddHttpClient(); services.AddControllers(); }
然后添加一個名為WebServiceTest的控制器,在控制器里面添加一個Get方法,在Get方法里面取調用WebService,控制器代碼如下
using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Threading.Tasks; using System.Xml; namespace HttpClientDemo.Controllers { [Route("api/WebServiceTest")] [ApiController] public class WebServiceTestController : ControllerBase { readonly IHttpClientFactory _httpClientFactory; /// <summary> /// 通過構造函數實現注入 /// </summary> /// <param name="httpClientFactory"></param> public WebServiceTestController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpGet] public async Task<string> Get() { string strResult = ""; try { // url地址格式:WebService地址+方法名稱 // WebService地址:http://localhost:5010/WebTest.asmx // 方法名稱: PostTest string url = "http://localhost:5010/WebTest.asmx/PostTest"; // 參數 Dictionary<string, string> dicParam = new Dictionary<string, string>(); dicParam.Add("para", "1"); // 將參數轉化為HttpContent HttpContent content = new FormUrlEncodedContent(dicParam); strResult = await PostHelper(url, content); } catch (Exception ex) { strResult = ex.Message; } return strResult; } /// <summary> /// 封裝使用HttpClient調用WebService /// </summary> /// <param name="url">URL地址</param> /// <param name="content">參數</param> /// <returns></returns> private async Task<string> PostHelper(string url, HttpContent content) { var result = string.Empty; try { using (var client = _httpClientFactory.CreateClient()) using (var response = await client.PostAsync(url, content)) { if (response.StatusCode == HttpStatusCode.OK) { result = await response.Content.ReadAsStringAsync(); XmlDocument doc = new XmlDocument(); doc.LoadXml(result); result = doc.InnerText; } } } catch (Exception ex) { result = ex.Message; } return result; } } }
然后啟動調試,查看輸出結果
調試的時候可以看到返回結果,在看看頁面返回的結果?
這樣就完成了WebService的調用。生產環境中我們可以URL地址寫在配置文件里面,然后程序里面去讀取配置文件內容,這樣就可以實現動態調用WebService了。我們對上面的方法進行改造,在appsettings.json文件里面配置URL地址
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", // url地址 "url": "http://localhost:5010/WebTest.asmx/PostTest" }
修改控制器的Get方法
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Threading.Tasks; using System.Xml; namespace HttpClientDemo.Controllers { [Route("api/WebServiceTest")] [ApiController] public class WebServiceTestController : ControllerBase { readonly IHttpClientFactory _httpClientFactory; readonly IConfiguration _configuration; /// <summary> /// 通過構造函數實現注入 /// </summary> /// <param name="httpClientFactory"></param> public WebServiceTestController(IHttpClientFactory httpClientFactory, IConfiguration configuration) { _httpClientFactory = httpClientFactory; _configuration = configuration; } [HttpGet] public async Task<string> Get() { string strResult = ""; try { // url地址格式:WebService地址+方法名稱 // WebService地址:http://localhost:5010/WebTest.asmx // 方法名稱: PostTest // 讀取配置文件里面設置的URL地址 //string url = "http://localhost:5010/WebTest.asmx/PostTest"; string url = _configuration["url"]; // 參數 Dictionary<string, string> dicParam = new Dictionary<string, string>(); dicParam.Add("para", "1"); // 將參數轉化為HttpContent HttpContent content = new FormUrlEncodedContent(dicParam); strResult = await PostHelper(url, content); } catch (Exception ex) { strResult = ex.Message; } return strResult; } /// <summary> /// 封裝使用HttpClient調用WebService /// </summary> /// <param name="url">URL地址</param> /// <param name="content">參數</param> /// <returns></returns> private async Task<string> PostHelper(string url, HttpContent content) { var result = string.Empty; try { using (var client = _httpClientFactory.CreateClient()) using (var response = await client.PostAsync(url, content)) { if (response.StatusCode == HttpStatusCode.OK) { result = await response.Content.ReadAsStringAsync(); XmlDocument doc = new XmlDocument(); doc.LoadXml(result); result = doc.InnerText; } } } catch (Exception ex) { result = ex.Message; } return result; } } }
這樣就可以動態調用WebService了。?
原文鏈接:https://www.cnblogs.com/dotnet261010/p/12631911.html
相關推薦
- 2023-04-19 SQLSERVER?的?truncate?和?delete?區別解析_MsSql
- 2022-07-26 使用Nginx+Tomcat實現負載均衡的全過程_nginx
- 2024-02-25 關于數據庫時間為datetime,前臺數據不正常級時區+8問題
- 2022-06-06 Python實現文字pdf轉換圖片pdf效果_python
- 2022-08-19 存儲引擎的應用場景
- 2022-09-22 【matlab】常微分方程的數值解法
- 2023-05-06 python?字典的概念敘述和使用方法_python
- 2022-11-03 Python日期與時間模塊(datetime+time+Calendar+dateuil?)相關使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支