webapi建立和呼叫WebService

ggtc發表於2024-05-01

首先需要引入soapcore包

image

這個包提供了所需的類和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檔案測試

image

  • 服務方法測試

image

新增WebService服務引用

為了方便測試,我把專案釋出了一下,然後把釋出了的專案exe執行了起來。在解決方案中再新增正在執行的專案裡面那個WebService。
有兩種方法新增服務引用

  • 第一種是在專案上右鍵選擇新增->服務引用,選擇WCF那一項
    image
  • 第二種方式是雙擊專案下面的Connected Service,然後選擇連線的服務,在服務引用那一欄點+號。仍然會彈出同樣的介面
    選擇下一步後,出現彈窗
    image
  • 填上服務的地址後點選轉到。
  • 點選瀏覽,選擇別人給的WSDL檔案
    這兩種方式都可以
    然後可以改一下自己認為合適的名稱空間,我改為了ProvinceServiceReference
    然後一路下一步就行

使用WebService

使用方式和普通的例項方法呼叫一樣,我把它寫到控制器Action中

[HttpGet]
[AllowAnonymous]
public async Task<object> GetProvinceService(string provinceName)
{
    ProvinceInfoServiceClient client = new ProvinceInfoServiceClient();
    return await client.GetProvinceInfoAsync(provinceName);
}
  • 測試

image

相關文章