CoreWCFプロジェクトは、Windows Communication Framework(WCF)から.NET Coreへの移植である。このプロジェクトの主要な目標は、既存のWCFプロジェクトを.NET Coreに移行できるようにすることであり、21か月間の公開開発の後、CoreWCFは最初のGAリリースに到達した。
プロトタイプの開発中に、CoreWCFプロジェクトはAmazon AWSチームに注目された。これにより、WS-*プロトコル(WS-Security、WS-SecureConversation)およびTransportWithMessageCredentialsセキュリティモードでのトークン認証クレデンシャルタイプがサポートされた。CoreWCF 0.1.0 GAリリースノートに記載されているように、これは、エンタープライズWCFサービスをクラウドプラットフォームでホストされているCoreWCFに移動できるようにするためのWS-Federationサポートに向けた重要なステップである
。
0.1. GAリリースと21か月の開発は、2つの重要なことに関連している。それは、非同期プログラミングモデル(APM)APIとコードの削除、および、直接のネイティブシステムコールとIOコードの削除である。これらの2つの変更に加えて、CoreWCFは、ASP.NET Coreミドルウェアパターンを採用し、クエストプッシュパイプラインモデルに移行した。
CoreWCFを使用すると、ASP.NET Coreのモデルで構成するために必要な最小限のコードで済む。その構成は、StartupクラスのASP.NET Coreの2つの慣れ親しんだメソッドConfigureServicesとConfigureで実施される。
WCFサポートを有効にするために、ConfigureServices
メソッド内に1つのシンプルなメソッドを追加する必要がある。
public void ConfigureServices(IServiceCollection services)
{
services.AddServiceModelServices();
}
Configure
メソッド内では、CoreWCFを構成するデリゲートがある拡張メソッドUseServiceModel(このIApplicationBuilderアプリ)が使用されている。
public void Configure(IApplicationBuilder app)
{
app.UseServiceModel(builder =>
{
builder.AddService<MyService>();
builder.AddServiceEndpoint<MyService, IMyService>(new BasicHttpBinding(), "/basic");
});
}
AddServiceメソッドを使って、タイプTService
のサービスの登録が実行される。また、サービスには、その種類のサービスタイプのビルダーに少なくとも1つのエンドポイントを追加する必要がある。
サービスのインスタンスを取得するメカニズムは、いくつかのステップに基づいている。最初のステップは、DIを調べて、利用可能な実装があるかどうかを確認することである。実装がない場合、インスタンス作成の代替として、標準のWCFと同じように、リフレクションを使用することになる。
InstanceContextMode.PerSessionまたはInstanceContextMode.PerCallのいずれかが使われる場合、CoreWCFは、インスタンスが必要になるたびに、利用できる場合にはDIにインスタンスを要求します。タイプがDIに登録されていない場合、WCFと同じ動作で代替します。これにより、IInstanceContextProviderを実装しなくても、ロガーなどの他の依存関係をサービスインスタンスに挿入できます。
WCFコアクライアントのNuGetパッケージSystem.ServiceModel.Primitives
が参照されている場合、CoreWCFはServiceContractやOperationContractなどのSystem.ServiceModel
名前空間コントラクト属性をサポートする。これにより、サーバーとクライアント間でコントラクトアセンブリを共有できる。これらの属性のCoreWCFバージョンも利用できるため、WCFコアクライアントのNuGetパッケージに依存する必要はない。
リリースロードマップは、高レベルの概要を提供し、1.0リリースの目標が.NET Frameworkからの移行を可能な限りスムーズにすることであることを明らかにしている。ASP.NET Core 2.1に依存しているため、WCFサービスからCoreWCFへの移植プロセスは、.NET Frameworkでの実行中に実施される。他にもいくつかのディスカッションがGitHubリポジトリでオープンとなっており、探索可能となっている。