在 REST API 出現之前,SOAP (Simple Object Access Protocol) 一直都是基於 web 的標準協議,雖然現在 REST 大行其道,但在平時開發中總會遇到對接第三方服務採用的是基於SOAP協議的場景,在這篇文章中,我們將會討論如何在 ASP.Net Core 中對接 WCF。
建立 WCFWCF 是一個安全可靠的訊息平臺,它提供統一的程式設計模型便於開發基於面向服務的應用程式,你可以使用 WCF 構建基於 SOAP 協議的服務,並使用 xml 作為資料交換格式,或者基於 REST 的 json 資料交換格式。
這一節中首先建立一個 WCF SOAP 服務,在建立專案模板的時候選擇 WCF Service Application
即可,如下圖所示:
值得注意的是,WCF 通常由以下幾個部分組成。
Service 類
Service 契約
Operation 契約
Endpoints 端點
Hosting 環境
當要使用 WCF,需要在類和方法上分別加上:ServiceContract
和 OperationContract
,下面的程式碼展示了一個契約類僅包含一個契約方法的程式碼定義。
[ServiceContract] public interface IAuthorService { [OperationContract] List<string> GetAuthorNames(); }
接下來定義一個 AuthorService
服務類實現一下 IAuthorService 介面,下面的程式碼展示了 AuthorService 類的具體定義。
public class AuthorService : IAuthorService { public List<string> GetAuthorNames() { List<string> lstAuthors = new List<string>(); lstAuthors.Add("Joydip Kanjilal"); lstAuthors.Add("Steve Smith"); lstAuthors.Add("Michael Stevens"); return lstAuthors; } }
這就是構建 WCF 服務的所有步驟,接下來就可以開啟瀏覽器對服務進行簡單測試了。
在 ASP.Net Core 中使用 SOAP 服務與傳統的 ASP.NET 不同,ASP.Net Core 中並沒有 Add Service Reference
選項去新增對 WCF 服務地址的引用,新的操作方式需要利用 Microsoft WCF Web Service Reference Provider
來進行服務引用,如下圖所示:
好了,接下來可以在 Controller 中初始化 SOAP Service ,然後再呼叫 Service 端的 GetAuthorNamesAsync() 方法,如下程式碼所示:
[HttpGet] public async Task<string[]> Get() { ServiceReference1.AuthorServiceClient authorServiceClient = new ServiceReference1.AuthorServiceClient(); var data = await authorServiceClient.GetAuthorNamesAsync(); return data; }
WCF Connected Service 是 Visual Studio 的一個擴充套件外掛,它允許在 ASP.Net Core 專案中實現對 WCF 服務的引用,當然,除了WCF還可以引用 Azure Storage
服務,關於 Azure Storage 的更多細節,我會在後面的文章中和大家細聊。