BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース CoreWCFが最初のGAリリースに到達

CoreWCFが最初のGAリリースに到達

原文(投稿日:2021/05/16)へのリンク

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はServiceContractOperationContractなどのSystem.ServiceModel名前空間コントラクト属性をサポートする。これにより、サーバーとクライアント間でコントラクトアセンブリを共有できる。これらの属性のCoreWCFバージョンも利用できるため、WCFコアクライアントのNuGetパッケージに依存する必要はない。

リリースロードマップは、高レベルの概要を提供し、1.0リリースの目標が.NET Frameworkからの移行を可能な限りスムーズにすることであることを明らかにしている。ASP.NET Core 2.1に依存しているため、WCFサービスからCoreWCFへの移植プロセスは、.NET Frameworkでの実行中に実施される。他にもいくつかのディスカッションがGitHubリポジトリでオープンとなっており、探索可能となっている。

この記事に星をつける

おすすめ度
スタイル

BT