一、什么是 SoapCore?
在現代微服務和 REST API 成為主流的今天,SOAP(Simple Object Access Protocol)看似已經被邊緣化,但在許多企業和政務系統中,SOAP 仍然是 重要的通信協議。特別是在金融、保險、醫療、政府等行業,很多老系統和第三方接口仍然依賴 SOAP 協議。
然而,自從 .NET Core 推出后,原本用于構建 SOAP 服務的 WCF(Windows Communication Foundation)在跨平臺的 .NET Core 中就不再被支持。這給需要構建或遷移 SOAP 服務的開發者帶來了挑戰。
SoapCore 正是為了解決這個問題而誕生的。它是一個開源庫,可以讓你在 ASP.NET Core 中實現 SOAP 服務功能,不需要依賴 WCF,輕量、易用、跨平臺。
二、SoapCore 的適用用戶
SoapCore 適用于以下類型的用戶和項目場景:
-
需要與傳統 SOAP 服務對接的開發者 如:集成第三方 SOAP 接口(例如銀聯、醫保、政務數據交換平臺)。
-
維護或遷移現有 WCF 服務的開發者 如果你的舊系統使用了 WCF,但現在需要遷移到 .NET 6/.NET 8,可以用 SoapCore 重寫服務邏輯。
-
需要公開 SOAP 接口給合作方的公司 某些合作伙伴只支持 SOAP 接口,可以用 SoapCore 快速構建 Web Service。
-
在容器或 Linux 環境部署 SOAP 服務的團隊 WCF 無法跨平臺,而 SoapCore 能完美運行在 Docker、Linux 等平臺。
三、SoapCore 的核心功能
功能 | 說明 |
---|---|
支持 SOAP 1.1 / 1.2 | 可兼容大多數 SOAP 客戶端和服務 |
WSDL 自動生成 | 自動提供標準格式的 Web 服務描述語言(WSDL) |
支持依賴注入(DI) | 與 ASP.NET Core 完全集成,便于管理服務生命周期 |
支持多種序列化方式 | 支持 DataContractSerializer、XmlSerializer |
可自定義中間件和過濾器 | 實現日志、認證、異常處理等功能 |
支持 HTTPS、SOAP Headers | 可通過中間件或擴展支持更復雜的協議層功能 |
四、如何使用 SoapCore?(開發示例)
1. 安裝 NuGet 包
dotnet?add?package?SoapCore
或者通過 Visual Studio 的 NuGet 管理器添加 SoapCore
包。
2. 編寫服務接口和實現類
[ServiceContract]
public?interface?ICalculatorService
{[OperationContract]int?Add(int?a,?int?b);
}
public?class?CalculatorService?:?ICalculatorService
{public?int?Add(int?a,?int?b){return?a?+?b;}
}
3. 在 ASP.NET Core 項目中注冊服務
public?void?ConfigureServices(IServiceCollection?services)
{services.AddSoapCore();services.AddSingleton<ICalculatorService,?CalculatorService>();services.AddControllers();?//?或?services.AddMvc();
}
public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env)
{app.UseRouting();app.UseEndpoints(endpoints?=>{endpoints.UseSoapEndpoint<ICalculatorService>("/CalculatorService.svc",?new?SoapEncoderOptions(),?SoapSerializer.DataContractSerializer);});
}
這樣就可以通過瀏覽器訪問:
http://localhost:5000/CalculatorService.svc?wsdl
五、SOAP Serializer 類型說明
SoapCore 支持多種序列化器:
類型 | 優點 | 使用場景 |
---|---|---|
DataContractSerializer(默認) | 性能高、易用 | 推薦大多數情況使用 |
XmlSerializer | 可自定義 XML 輸出格式 | 與舊系統集成時更靈活 |
自定義序列化器 | 完全自定義 | 特殊場景 |
示例:
endpoints.UseSoapEndpoint<IMyService>("/Service.svc",?new?SoapEncoderOptions(),?SoapSerializer.XmlSerializer);
六、常見高級用法
? 添加認證中間件(如 Basic Auth)
你可以通過 app.UseMiddleware<YourAuthMiddleware>()
插入認證邏輯。
? 自定義 SOAP Header 處理
SoapCore 支持自定義請求頭,可通過 MessageInspector
實現。
? 多個 SOAP Endpoint 同時提供
你可以在 UseEndpoints
中注冊多個 UseSoapEndpoint<>
,實現不同服務接口的并行運行。
七、SoapCore 的優勢與局限
? 優勢:
-
輕量級,無需完整 WCF 框架
-
與 ASP.NET Core 原生集成
-
支持依賴注入、跨平臺部署
-
社區活躍,開源可擴展
?? 局限:
-
不完全兼容所有 WCF 功能(如復雜的 Duplex 服務)
-
高度自定義需求需手動擴展(如安全策略、簽名)
八、結語
在當今 .NET 開發領域,如果你需要在 現代架構 中保留對傳統 SOAP 協議的支持,SoapCore 是一個非常優秀的解決方案。它既保持了與 WCF 接口風格的兼容,又具備了 ASP.NET Core 的靈活性和擴展能力。
無論是為了兼容老系統,還是為特定合作方提供接口服務,SoapCore 都可以幫助你快速、安全地構建符合標準的 SOAP Web Service。
https://github.com/DigDes/SoapCore.git