C#使用Refit對接WebService介面

C#使用Refit對接WebService介面

群友說.NET Core無法對接WebService,站長找了些資料,希望能幫助到他

最後更新 2023/3/15 下午8:33
沙漠尽头的狼
預計閱讀 2 分鐘
分類
.NET
標籤
.NET C# Refit WebService

Refit 是一款強大的型別安全 RESTful HTTP 用戶端程式庫,能夠幫助我們輕鬆地與 Web API 進行通訊。不過在本問題中,我們需要使用 Refit 與 Web Service 進行通訊,因此需要對 Refit 進行一些特定的設定。

下面是一個使用 Refit 呼叫 Web Service 介面的範例:

  1. 首先,需要在專案中加入 Refit 程式庫的參考,可以透過 NuGet 套件管理員搜尋 Refit 並安裝。

  2. 然後,我們需要定義一個介面來描述 Web Service 介面,例如:

public interface IMyWebService
{
    [Post("/MyWebService.asmx")]
    Task<string> MyWebServiceMethod(string param1, string param2);
}

其中 [Post] 指定了呼叫的 HTTP 方法和 URL,Task<string> 是方法回傳型別。

  1. 接下來,我們需要使用 Refit 的 RestService.For 方法建立一個用戶端實例:
var client = RestService.For<IMyWebService>("http://example.com");

其中 "http://example.com" 是 Web Service 的位址。

  1. 最後,我們就可以使用用戶端實例來呼叫 Web Service 介面了:
var result = await client.MyWebServiceMethod("param1", "param2");

其中 result 是 Web Service 方法的回傳值。

需要注意的是,由於 Web Service 介面不是基於 RESTful 架構的,因此需要進行一些特定的設定。例如,在介面定義中使用 [Post] 指定呼叫的 HTTP 方法為 POST,同時需要將 Web Service 方法的名稱作為 URL 的一部分,例如:

public interface IMyWebService
{
    [Post("/MyWebService.asmx/MyWebServiceMethod")]
    Task<string> MyWebServiceMethod(string param1, string param2);
}

另外,需要在用戶端實例中指定 Web Service 的 SOAP 1.1 命名空間,例如:

var client = RestService.For<IMyWebService>("http://example.com", new RefitSettings
{
    UrlParameterFormatter = new SoapUrlParameterFormatter(),
    ContentSerializer = new XmlContentSerializer(new RefitXmlSerializerSettings
    {
        Namespace = "http://schemas.xmlsoap.org/soap/envelope/",
        UseXmlSerializerFormat = true
    })
});

在這裡,我們使用了 SoapUrlParameterFormatter 來處理 URL 中的參數,使用了 XmlContentSerializerRefitXmlSerializerSettings 來處理請求和回應的 XML 資料。

總之,使用 Refit 呼叫 Web Service 介面需要進行一些特定的設定,但是只要按照上述範例進行操作,就可以輕鬆地完成對接。

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2026/2/7

AOT使用經驗總結

從專案建立伊始,就應養成良好的習慣,即只要添加了新功能或使用了較新的語法,就及時進行 AOT 發布測試。

繼續閱讀