首先需要引入soapcore包
這個包提供了所需的類和soap終結點中介軟體。
引入這個這個包之後,我們需要定義提供的服務。
這裡我寫了一個用於查詢省份面積的服務。
省份資訊服務
/// <summary>
/// 省份資訊服務介面
/// </summary>
[ServiceContract]
public interface IProvinceInfoService
{
/// <summary>
/// 獲取省份面積
/// </summary>
/// <param name="provinceName"></param>
/// <returns></returns>
[OperationContract]
ProvinceResult GetProvinceInfo(string provinceName);
}
/// <summary>
/// 省份資訊服務實現
/// </summary>
public class ProvinceInfoService : IProvinceInfoService
{
public ProvinceResult GetProvinceInfo(string provinceName)
{
if (string.IsNullOrEmpty(provinceName))
{
return new ProvinceResult();
}
else
{
switch (provinceName)
{
case "四川":
return new ProvinceResult() { Name= provinceName,Area=48.14m };
case "新疆":
return new ProvinceResult() { Name = provinceName, Area = 166 };
default:
return new ProvinceResult() { Name = provinceName};
}
}
}
}
/// <summary>
/// 實體類
/// </summary>
[DataContract]
public class ProvinceResult
{
[DataMember]
public string Name { get; set; }
[DataMember]
public decimal Area { get; set; }
}
定義服務之後在web主機中註冊服務
//新增webService服務
builder.Services.AddSingleton<IProvinceInfoService, ProvinceInfoService>();
//新增webservice服務終結點,當請求的資源在控制器中路由不到時會路由到這裡
app.UseSoapEndpoint<IProvinceInfoService>("/ProvinceInfoService", new SoapEncoderOptions());
現在WebService就建立好了,實在是很簡單。只是soapcore沒有提供測試頁面,而netFramework用.asmx寫的服務不加後面的路徑時,返回的是一個HTML測試頁面,很方便。soapcore就沒有搞這個了,預設是返回WSDL檔案。
測試服務
-
WSDL檔案測試
-
服務方法測試
新增WebService服務引用
為了方便測試,我把專案釋出了一下,然後把釋出了的專案exe執行了起來。在解決方案中再新增正在執行的專案裡面那個WebService。
有兩種方法新增服務引用
- 第一種是在專案上右鍵選擇新增->服務引用,選擇WCF那一項
- 第二種方式是雙擊專案下面的Connected Service,然後選擇連線的服務,在服務引用那一欄點+號。仍然會彈出同樣的介面
選擇下一步後,出現彈窗
- 填上服務的地址後點選轉到。
- 點選瀏覽,選擇別人給的WSDL檔案
這兩種方式都可以
然後可以改一下自己認為合適的名稱空間,我改為了ProvinceServiceReference
然後一路下一步就行
使用WebService
使用方式和普通的例項方法呼叫一樣,我把它寫到控制器Action中
[HttpGet]
[AllowAnonymous]
public async Task<object> GetProvinceService(string provinceName)
{
ProvinceInfoServiceClient client = new ProvinceInfoServiceClient();
return await client.GetProvinceInfoAsync(provinceName);
}
-
測試