CoreWCF 1.0 正式發布,支持 .NET Core 和 .NET 5+ 的 WCF

CoreWCF 項目組正式發布 1.0 版本的 CoreWCF, 這是面向 .NET Core 平臺的 WCF 移植版本。它支持 SOAP、NetTCP 和 WSDL 的相同實現。在代碼中的使用方式于 WCF 相同,但是升級到使用 ASP.NET Core 作為服務宿主,并工作在 .NET Core 平臺上。這是該項目的第一個主要發布,為 .NET Core、.NET Framework 和 .NET 5+ 提供 WCF 的特性。

CoreWCF 1.0 版本兼容于 .NET standard 2.0,所以它可以工作在:

  • .NET Framework 4.6.2 (及以上)

  • .NET Core 3.1

  • .NET 5 & 6

對于 .NET Framework 的支持簡化了了遷移到 .NET Core 代價。依賴 WCF 的應用程序可以在 .NET Framewordk 平臺就地升級到使用 CoreWCF。對于隨后升級到使用 .NET Core 或者 .NET 5+ 也一樣。

程序集可以通過 Nuget.org 得到,參見發布說明中的描述。

社區項目

CoreWCF 于 2019年6 月作為社區項目?發布,在隨后的 3 年中有眾多的貢獻者。作為社區項目,CoreWCF 有大量的來自微軟員工之外的貢獻者,以及常規的來自 AWS 和其它組織的貢獻者。

特別感想?所有?貢獻代碼的開發者、問題以及建議者。該項目能夠發展到今天,社區的支持至關重要,我們希望今后繼續得到大家的支持。如果我不特別提到@ mconnew,那將是我的失職,他一直是項目的骨干,并貢獻了大部分代碼。

作為社區項目,來自社區的聲音引導著項目的方向。例如,Feature Roadmap Vote issue 是計劃下一步工作的高度流暢的渠道。如果你是 WCF 用戶,請提供你對今后版本的期待。

特性

CoreWF 是來自 WCF 功能子集,但是包含了我們相信是其中最為重要的部分功能,包括

  • Http & NetTCP transports

  • Bindings:

    • BasicHttpBinding

    • NetHttpBinding

    • NetTcpBinding – some WS-* features not supported

    • WebHttpBinding

    • WSHttpBinding – some WS-* features not supported

  • Security:

    • Transport

    • NetTcpBinding supports Certificate and Windows authentication

    • Http bindings require authentication to be configured in ASP.NET Core

    • Transport With Message Credentials

    • Username, Certificate and Windows Authentication are supported

    • WS Federation

  • WSDL generation

  • Partial configuration support including services & endpoints

  • Extensibility (IServiceBehavior and IEndpointBehavior) – most extensibility is available

沒有實現的 WCF 主要功能有:

  • Transports other than Http and NetTCP.

  • Message security beyond Transport & Transport with Message Credentials

  • Distributed transactions

  • Message Queueing

誰應該使用 CoreWCF?

CoreWCF 面向的對象是曾經在 .NET Framework 下使用 WCF 的開發者,以及需要在 .NET Core 下需要使用 WCF 來現代化應用的開發者。盡管并沒有什么可以阻止你對新項目適配 CoreWCF,我們還是建議你考慮更為現代的 SOAP 的替代品,例如 gRPC。CoreWCF 的關鍵點是對強依賴于 WCF 和 SOAP 的服務器和客戶端應用更為簡單的進行現代化。

來自微軟的支持

我們認可對于企業客戶的支持是如何重要,所以我們很高興地宣布微軟的產品支持將提供給 CoreWCF 客戶。

對于 CoreWCF 1.x 的支持將基于底層運行的 .NET 平臺狀態。

運行時版本Support dependency duration
.NET Framework 4.xThe specific version of .NET Framework, and ASP.NET Core 2.1.
.NET Core 3.1.NET 3.1 LTS – December 3, 2022
.NET 5.NET 5 – May 8, 2022
.NET 6.NET 6 LTS – November 8, 2024

CoreWCF 將使用 Major.Minor 版本策略:

  • 1.0 將是 CoreWCF 的第一個主要版本

  • Minor 發布將標記為 1.x,對基礎平臺的要求與 1.0 相同

  • Minor 發布版本 (1.x) 將 API 兼容于 1.0 版本

  • 對于主要版本的支持將會持續到最后的 major.minor 發布

    • 當新的 major 或者 minor 發布的時候,上一版本將從新版本發布之日起,繼續支持 6 個月,前提是正在使用的基礎運行時依賴項仍在支持范圍內。

  • 后繼的主要版本,例如 2.0,可能縮減支持的運行時。對于當前的 1.x 版本,會對于 2.x 版本不再支持的版本繼續支持 6 個月,并且支持的時間僅限于底層的平臺。

    • 最可能涉及到 .NET Framework,并且意味著只要支持 ASP.NET Core 2.1 和 .NET Framework 4.x,就可以支持 1.x。

更多支持

其它的組織或者公司可能選擇支持使用了 CoreWCF 的產品或者服務。

使用入門

對于數據和服務的定義與實現于 WCF 相同。主要的區別在于現在的宿主變成了 ASP.NET Core,以及服務暴露出來的方式。以下示例基于 .NET 6,但是同樣的步驟也適用于其它平臺。

1. 定義服務

1.1 創建空白的 ASP.NET Core 應用程序,它提供服務的寄宿支持

Visual Studio

444dd9d5bdb57053e8839f7f4a7eb6ac.png

命令行:

mkdir CoreWCFDemoServer
dotnet new web -n CoreWCFDemoServer -o CoreWCFDemoServer

1.2 添加 CoreWCF Nuget 包

Visual Studio

使用包管理器控制臺,添加:

  • CoreWCF.Primitives

  • CoreWCF.Http

719baa738b2c6c6c5ca8b2fe82006943.png

編輯項目文件,并添加:

<ItemGroup><PackageReference Include="CoreWCF.Http" Version="1.0.0" /><PackageReference Include="CoreWCF.Primitives" Version="1.0.0" />
</ItemGroup>

1.3 創建服務約定和數據約定定義

這些定義與 WCF 中相同。當改進項目的時候,這些代碼很大部分不需要修改。

文件:IEchoService.cs

using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;
using CoreWCF;namespace CoreWCfDemoServer
{[DataContract]public class EchoFault{[AllowNull]private string _text;[DataMember][AllowNull]public string Text{get { return _text; }set { _text = value; }}}[ServiceContract]public interface IEchoService{[OperationContract]string Echo(string text);[OperationContract]string ComplexEcho(EchoMessage text);[OperationContract][FaultContract(typeof(EchoFault))]string FailEcho(string text);}[DataContract]public class EchoMessage{[AllowNull][DataMember]public string Text { get; set; }}
}

文件 EchoService.cs

using CoreWCF;namespace CoreWCfDemoServer
{public class EchoService : IEchoService{public string Echo(string text){System.Console.WriteLine($"Received {text} from client!");return text;}public string ComplexEcho(EchoMessage text){System.Console.WriteLine($"Received {text.Text} from client!");return text.Text;}public string FailEcho(string text)=> throw new FaultException<EchoFault>(new EchoFault() { Text = "WCF Fault OK" }, new FaultReason("FailReason"));}
}

1.4 需要告訴服務宿主哪些服務需要通過綁定暴露出來

更新 Program.cs 來暴露綁定。

using CoreWCF;
using CoreWCF.Configuration;
using CoreWCF.Description;
using CoreWCfDemoServer;var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{options.AllowSynchronousIO = true;
});// Add WSDL support
builder.Services.AddServiceModelServices().AddServiceModelMetadata();
builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();var app = builder.Build();
app.UseServiceModel(builder =>
{builder.AddService((serviceOptions) => { })// Add a BasicHttpBinding at a specific endpoint.AddServiceEndpoint<EchoService, IEchoService>(new BasicHttpBinding(), "/EchoService/basichttp")// Add a WSHttpBinding with Transport Security for TLS.AddServiceEndpoint<EchoService, IEchoService>(new WSHttpBinding(SecurityMode.Transport), "/EchoService/WSHttps");
});
var serviceMetadataBehavior = app.Services.GetRequiredService();
serviceMetadataBehavior.HttpGetEnabled = true;app.Run();

1.5 更新 appsettings.json 來指定固定的服務監聽端口

在 appsettings.json 文件中的?Logging?之前,增加如下行。

"Urls": "http://localhost:5000;https://localhost:5001",

1.6 運行項目以便服務可以被訪問

2. 消費服務

2.1 創建控制臺應用

2.2 添加服務引用

Visual Studio

使用?添加服務引用?命令,選擇?WCF Web Service?作為服務類型

e54195e8ab8623717c77acfddacbb9ab.png

使用?http://localhost:5000/EchoService/basichttp?作為 WSDL 服務發現的 URL 地址。

命令行方式:

dotnet tool install --global dotnet-svcutil
dotnet-svcutil --roll-forward LatestMajor http://localhost:5000/EchoService/basichttp?wsdl

2.3 將控制臺應用代碼替換為如下代碼

using ServiceReference1;
// Instantiate the Service wrapper specifying the binding and optionally the Endpoint URL. The BasicHttpBinding could be used instead.
var client = new EchoServiceClient(EchoServiceClient.EndpointConfiguration.WSHttpBinding_IEchoService, "https://localhost:5001/EchoService/WSHttps");var simpleResult = await client.EchoAsync("Hello");
Console.WriteLine(simpleResult);var msg = new EchoMessage() { Text = "Hello2" };
var msgResult = await client.ComplexEchoAsync(msg);
Console.WriteLine(msgResult);

其它示例

其它示例,包括桌面應用示例,請參閱:CoreWCF/src/Samples: https://github.com/CoreWCF/CoreWCF/tree/main/src/Samples

總結

我們很高興看到社區在 CoreWCF 上的投入,并祝賀此發布。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【經典回放】多種語言系列數據結構算法:快速排序

快速排序(Quicksort)是對冒泡排序的一種改進。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過…

表頭合并_多個Excel表格合并數據麻煩?試試Power Query輕松幫你解決

Hi!大家好&#xff01;歡迎來到小龍自修室&#xff01;又到了小龍分享時間&#xff01;(今天的內容有點多&#xff0c;希望各位看官一定要看到最后&#xff01;有驚喜)上一篇文字小龍和大家一起制作了一個限定數據內容錄入的電子表格&#xff0c;我的表格我做主&#xff01;表格…

C++入門指南及實戰 第三步 基本變量

在C編程中&#xff0c;內置了一些基本數據類型用來存儲一些不同類型的值。有字符類型 char 用以存儲字符&#xff0c;如a、b、c、d、-、、1、2、4、3、>、?等&#xff1b;有整形 int 用以存儲整數類型&#xff0c;如1、2、3、4、5、11、111、2311等&#xff1b;有浮點類型 …

OPCServer Modbus使用和配置

一&#xff0c;安裝KEPware.Enhanced.OPC.DDE.KEPServer。(PLC數據傳送給KEPServer,開發的程序用OPCServer讀KEPServer) 設置ip地址后面是指的plc站號&#xff0c;此處必須和plc上站號對應。否則無法接收數據。 打開quick client 查看傳值情況 二.C#程序代碼 引用opcdaauto.dll…

C# 創建命名管道服務器

通過創建 NamedPipeServerStream 的一個新實例&#xff0c;來創建服務器。NamedPipeServerStream 派生自基類 PipeStream&#xff0c;PipeStream 派生自 Stream 基類&#xff0c;因此可以使用流的所有功能&#xff0c;例如&#xff0c;可以創建CryptoStream 或 GZipStream&…

在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress

2019獨角獸企業重金招聘Python工程師標準>>> 在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress 在Banana Pi BPI-M1上使用OxOffice Impress&#xff0c;該簡報大小約26MB&#xff0c;採用自動播放機制。 OxOffice提供 arm linux的版本&#xff0c;可佈署在ar…

免殺新姿勢:利用線程將惡意代碼注入到內存中

本文講的是免殺新姿勢&#xff1a;利用線程將惡意代碼注入到內存中&#xff0c;產生存放遠程攻擊線程的進程在這篇文章中我不想一步一步解釋我編寫的C#代碼&#xff0c;但是我會展示下它能夠繞過殺毒軟件&#xff0c;并且操作非常簡單&#xff0c;而且實用。 首先說明一下&…

【經典回放】多種語言系列數據結構算法:希爾排序

【希爾排序原理】每隔sp(整數)個數即取數并判斷大小,交換,先構造局部有序序列,直到sp為1,構造完整的有序序列。 給出一組數據,如下: 0 1 2 3

Java之解決散列表的沖突用開放定址法和鏈表法

1 問題 理想狀態下&#xff0c;散列表就是一個包含關鍵字的固定大小的數組&#xff0c;通過使用散列函數&#xff0c;將關鍵字映射到數組的不同位置&#xff0c;哈希函數可以將關鍵字均勻的分散到數組的不同位置&#xff0c;不會出現兩個關鍵字散列值相同&#xff08;假設關鍵…

python 手把手教你基于搜索引擎實現文章查重

前言 文章抄襲在互聯網中普遍存在&#xff0c;很多博主都收受其煩。近幾年隨著互聯網的發展&#xff0c;抄襲等不道德行為在互聯網上愈演愈烈&#xff0c;甚至復制、黏貼后發布標原創屢見不鮮&#xff0c;部分抄襲后的文章甚至標記了一些聯系方式從而使讀者獲取源碼等資料。這…

lru算法實現 redis_使用數組與雙向鏈表實現一個簡單的LRU算法

什么是LRU算法&#xff1f;redis大家都玩過吧&#xff0c;你們好奇redis內存數據存滿之后會發生什么嗎&#xff1f;拋出異常&#xff1f;禁止使用&#xff1f;還是刪除數據&#xff1f;其實redis設計了一種內潤淘汰機制。noeviction(默認策略)&#xff1a;屏蔽寫操作&#xff0…

【經典回放】多種語言系列數據結構算法:歸并排序

目錄 干貨1:C#語言實現歸并排序! 干貨2:C語言實現歸并排序! 干貨1:C#語言實現歸并排序! 一、算法 1、思想基礎

Java對象和類

轉自原文&#xff1a;http://www.yiibai.com/java/java_object_classes.html java是一種面向對象的語言。由于具有面向對象特性的語言&#xff0c;Java支持以下基本概念&#xff1a; 多態性繼承封裝抽象化類對象實例方法消息解析在本章中&#xff0c;我們將探討類和對象這些概念…

bzoj3224 Tyvj 1728 普通平衡樹題解--Treap

題面&#xff1a; Description您需要寫一種數據結構&#xff08;可參考題目標題&#xff09;&#xff0c;來維護一些數&#xff0c;其中需要提供以下操作&#xff1a; 1. 插入x數 2. 刪除x數(若有多個相同的數&#xff0c;因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&…

Blazor University (18)使用 RenderFragments 模板化組件 —— 創建 TabControl

原文鏈接&#xff1a;https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/創建一個 TabControl 組件源代碼[1]接下來我們將創建一個 TabControl 組件。這將教您如何實現以下目標&#xff1a;將數據傳遞到 RenderFragment 以為其…

Java之GC機制

1 JVM基本結構 1&#xff09;類加載器classLoader&#xff1a;在JVM啟動時或者類運行時將需要的.class文件加載到內存中 2&#xff09;內存區域&#xff08;運行時數據區&#xff09;&#xff1a; 是在JVM運行的時候操作所分配的內存區 3&#xff09;執行引擎&#xff1a;負…

ArcGIS實驗教程——實驗十八:疊置分析(Overlay Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 目 錄 一、實驗描述 二、實驗內容 三、實驗目的 四、實驗數據

《零基礎看得懂的C語言入門教程 》——(一)脫離學習誤區

本節視頻連接&#xff1a; https://www.bilibili.com/video/BV1Qv411t7ae 新手C語言學習有些誤區你應該知道&#xff0c;這樣學習起來事半功倍~一、前言 距離上一次編寫C語言的教程是5年前了&#xff08;2015年&#xff09;&#xff0c;由于自己是從初一時開始學習編程&#…

一套完整的導視設計案例_色彩導視藝術:烏克蘭基輔語言學校導視設計案例

學校導視設計案例建筑師Emil Dervish為烏克蘭基輔Underhub語言學校設計了色彩繽紛的導視系統&#xff0c;該設計靈感來源于倫敦地鐵&#xff0c;他希望通過彩色線條的大膽應用來營造輕松而歡樂的氛圍。讓我們一起來看看這座由“彩虹”做導視的學校。彩虹導視設計跟著紅色導視線…

C# 創建匿名管道

下面對匿名管道執行類似的操作。通過匿名管道&#xff0c;創建兩個彼此通信的任務。為了給管道的創建發出信號&#xff0c;使用 ManualResetEventSlim 對象&#xff0c;與內存映射文件一樣。在 Program 類的 Run 方法中&#xff0c;創建兩個任務&#xff0c;調用 Reader 和 Wri…