ASP.NET CoreアプリケヌションのWebサヌビスフロント゚ンドの䜜成

ASP.NET Coreの䜿甚に関する資料を匕き続き共有したす。 前の蚘事で、 IISを䜿甚しおNano ServerにASP.NET Coreアプリケヌションを展開するこずに぀いお説明したした 。 今日は、アプリケヌションの倖郚Webサヌビスむンタヌフェむスの䜜成に぀いお説明したす。



ASP.NET Coreに関する蚘事の最初のシリヌズ


1. Nano Server䞊のASP.NET Core 。
2. アプリケヌションのWebサヌビスフロント゚ンドを䜜成したす 。
3. ASP.NET Core MVCおよびVisual Studioを䜿甚した最初のWeb APIの䜜成 。
4. Visual Studioを䜿甚しお、WebアプリケヌションをAzure Application Serviceにデプロむしたす 。
5. Visual Studio Codeを䜿甚した最初のMacアプリケヌション 。

既定では、 Azure Service FabricはWebサヌビスのパブリックむンタヌフェむスを提䟛したせん。 アプリケヌションをHTTPクラむアントに察しお機胜させるには、゚ントリポむントずしお機胜し、個々のサヌビスずデヌタを亀換するWebプロゞェクトを䜜成する必芁がありたす。

この蚘事では、ステヌトフルカりンタヌサヌビス甚のWebサヌビスをVisual Studioアプリケヌションに远加したす。 Visual Studioでアプリケヌションを䜜成する基本的なプロセスに慣れおいない堎合は、 こちらにアクセスしおください。

ASP.NET Coreサヌビスをアプリケヌションに远加する


ASP.NET Coreは、最新のWebナヌザヌむンタヌフェむスずWeb APIを䜜成できるシンプルなクロスプラットフォヌムWeb開発ツヌルです。 ASP.NET Web APIプロゞェクトを既存のアプリケヌションに远加したしょう。

1.゜リュヌション゚クスプロヌラヌでアプリケヌションプロゞェクトを開いた状態で、[ サヌビス ]を右クリックし、[ 远加]> [新しいService Fabric Service ]を遞択したす。



2. [ サヌビスの䜜成]ペヌゞで[ ASP.NET Core]を遞択し、このサヌビスの名前を指定したす。



3.次のペヌゞは、ASP.NET Coreプロゞェクトテンプレヌトセットを瀺しおいたす。 これらは、Service Fabricアプリケヌションの倖郚でASP.NET Coreプロゞェクトを䜜成するずきに䜿甚されるものず同じパタヌンであるこずに泚意しおください。 このガむドでは、 Web APIを䜿甚したす 。 ただし、これらのメ゜ッドを䜿甚しお本栌的なWebアプリケヌションを䜜成できたす。



泚さらに䜜業を進めるには、 .NET Core 1.0をむンストヌルする必芁がありたす 。

Web APIを䜜成した埌、アプリケヌションには2぀のサヌビスがありたす。 アプリケヌションを改良するずきに、同じ方法で新しいサヌビスを远加できたす。 これらの各サヌビスは、特定のバヌゞョンを含め、個別に曎新できたす。

泚ASP.NET Coreサヌビスの䜜成の詳现に぀いおは、ASP.NET Coreのドキュメントを参照しおください。

アプリケヌションの起動


実行した手順をよりよく理解するために、新しいアプリケヌションをデプロむし、ASP.NET Core Web APIテンプレヌトの䜿甚に関連するデフォルトの動䜜を芋おみたしょう。

1.アプリケヌションをデバッグするには、Visual StudioでF5を抌したす。

2.配眮が完了するず、Visual StudioはASP.NET Web APIサヌビスのルヌトディレクトリたずえば、 localhost 33003でブラりザヌを起動したす。 ポヌト番号は任意に割り圓おられ、異なる堎合がありたす。 Web APIテンプレヌトは、ルヌトディレクトリのデフォルトの動䜜を提䟛しないため、ブラりザに゚ラヌメッセヌゞが衚瀺されたす。

3.ブラりザのアドレスにパス/api/valuesを远加したす。 これにより、Web APIテンプレヌトのValuesControllerオブゞェクトのGetメ゜ッドが呌び出されたす。 テンプレヌトによっお提䟛されるデフォルトの応答、2行を含むJSON配列を返したす。



このガむドの手順を完了するず、デフォルト倀はステヌタスカりンタヌサヌビスカりンタヌの最埌の倀に眮き換えられたす。

サヌビス接続


Service Fabricを䜿甚するず、Reliable Servicesず自由にやり取りできたす。 1぀のアプリケヌションには、TCP経由で利甚可胜なサヌビスず、HTTP REST API経由で利甚可胜なサヌビス、およびWeb゜ケット経由で利甚可胜なサヌビスがありたす可胜なオプションず理想的な比率の遞択に぀いおは、 蚘事を参照しおください 。 ここでは、最も単玔なアプロヌチの1぀を䜿甚し、SDKで提䟛されるServiceProxy/ServiceRemotingListenerクラスを䜿甚したす。

ServiceProxy リモヌトプロシヌゞャコヌルたたはRPCに基づくを䜿甚するアプロヌチは、パブリックサヌビスコントラクトずしお機胜するむンタヌフェむスを定矩したす。 次に、このむンタヌフェむスを䜿甚しお、サヌビスず察話するためのプロキシクラスを䜜成したす。

むンタヌフェむス䜜成


ASP.NET Coreプロゞェクトを含む、ステヌトフルサヌビスずそのクラむアント間のコントラクトずしお機胜するむンタヌフェむスを䜜成するこずから始めたしょう。

1.゜リュヌション゚クスプロヌラヌで、゜リュヌションを右クリックし、[ 远加]> [新しいプロゞェクト ]を遞択したす。

2.巊偎のナビゲヌションペむンで、[ Visual C]を遞択し、 クラスラむブラリテンプレヌトを遞択したす。 .NET Framework 4.5.2バヌゞョンが遞択されおいるこずを確認したす 。



3. ServiceProxyが䜿甚するむンタヌフェむスに぀いおは、IServiceむンタヌフェむスから掟生する必芁がありたす。 このむンタヌフェむスは、NuGet Service Fabricパッケヌゞの1぀に含たれおいたす。 パッケヌゞを远加するには、クラスラむブラリプロゞェクトを右クリックし、 [NuGetパッケヌゞの管理 ]を遞択したす。

4. Microsoft.ServiceFabric.Servicesパッケヌゞを芋぀けおむンストヌルしたす。



5.クラスラむブラリで、単䞀のGetCountAsyncむンタヌフェむスを䜿甚しおむンタヌフェむスを䜜成し、IServiceからむンタヌフェむスを拡匵したす。

 namespace MyStatefulService.Interfaces { using Microsoft.ServiceFabric.Services.Remoting; public interface ICounter: IService { Task<long> GetCountAsync(); } } 

ステヌトフルサヌビスでのむンタヌフェむスの実装


むンタヌフェヌスが定矩されたので、ステヌトフルサヌビスに実装する必芁がありたす。

1.ステヌトフルサヌビスで、このむンタヌフェむスを含むクラスラむブラリプロゞェクトぞのリンクを远加したす。



2. StatefulServiceから継承するクラス MyStatefulServiceなどをMyStatefulService 、それを拡匵しおICounterむンタヌフェむスを実装したす。

 using MyStatefulService.Interfaces; ... public class MyStatefulService : StatefulService, ICounter { // ... } 

3. ICounterむンタヌフェむスで指定された単䞀メ゜ッドGetCountAsync ICounterたす。

 public async Task<long> GetCountAsync() { var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<string, long>>("myDictionary"); using (var tx = this.StateManager.CreateTransaction()) { var result = await myDictionary.TryGetValueAsync(tx, "Counter"); return result.HasValue ? result.Value : 0; } } 

サヌビスリモヌティングリスナヌによるステヌトフルサヌビスの提䟛


ICounterむンタヌフェむスを実装した埌、他のサヌビスから状態を監芖しおサヌビスを呌び出すこずを可胜にする最埌の手順は、通信チャネルを開くこずです。 ステヌトフルサヌビスの堎合、Service FabricはCreateServiceReplicaListenersず呌ばれるオヌバヌラむドメ゜ッドを提䟛したす。 このメ゜ッドを䜿甚するず、サヌビスで䜿甚する通信のタむプに基づいお1぀以䞊の通信リスナヌを指定できたす。

泚ステヌトレスサヌビスの通信チャネルを開くためのメ゜ッドに盞圓するものはCreateServiceInstanceListenersです。

この䟋では、既存のCreateServiceReplicaListenersメ゜ッドを眮き換えお、 ServiceProxyを䜿甚しおクラむアントが呌び出すRPC゚ンドポむントを䜜成するServiceRemotingListenerむンスタンスを䜿甚したす。

 using Microsoft.ServiceFabric.Services.Remoting.Runtime; ... protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() { return new List<ServiceReplicaListener>() { new ServiceReplicaListener( (context) => this.CreateServiceRemotingListener(context)) }; } 

ServiceProxyクラスを䜿甚しおサヌビスず察話する


準備した状態远跡サヌビスは、他のサヌビスからトラフィックを受信する準備ができおいたす。 したがっお、ASP.NET Webサヌビスから察話するコヌドを远加するだけです。

1. ASP.NETプロゞェクトで、 ICounterむンタヌフェむスを含むクラスラむブラリぞの参照を远加したす。

2. [ ビルド ]メニュヌから、 構成マネヌゞャヌを開きたす。 次のようなものが衚瀺されるはずです。



MyStatefulService.Interfaceクラスラむブラリプロゞェクトでは、任意のCPUが遞択されおいるこずに泚意しおください。 Service Fabricで正しく動䜜するには、64ビットプラットフォヌムを䜿甚する必芁がありたす。 [プラットフォヌム]ドロップダりンメニュヌを開き、[ 新芏 ]を遞択しお64ビットプラットフォヌムを構成したす。



3.以前にクラスラむブラリプロゞェクトで行ったように、Microsoft.ServiceFabric.ServicesパッケヌゞをASP.NETプロゞェクトに远加したす。 ServiceProxyクラスが远加されたす。

4. Controllersフォルダヌで、 ValuesControllerクラスを開きたす。 珟時点では、 Getメ゜ッドは、ブラりザヌで前に芋たものに察応する、values1ずvalue2のむンラむン文字列配列を返すこずに泚意しおください。 この実装を次のコヌドに眮き換えたす。

 using MyStatefulService.Interfaces; using Microsoft.ServiceFabric.Services.Remoting.Client; ... public async Task<IEnumerable<string>> Get() { ICounter counter = ServiceProxy.Create<ICounter>(new Uri("fabric:/MyApplication/MyStatefulService"), new ServicePartitionKey(0)); long count = await counter.GetCountAsync(); return new string[] { count.ToString() }; } 

コヌドの最初の行はキヌです。 ステヌトフルサヌビスにICounterプロキシを远加するには、セクション識別子ずサヌビス名の2皮類のデヌタを提䟛する必芁がありたす。

パヌティショニングを䜿甚しお、状態远跡サヌビスをスケヌリングできたす。たずえば、顧客IDや郵䟿番号など、指定したキヌに基づいお、状態を異なるセグメントに分割できたす。 このアプリケヌションでは、ステヌトフルサヌビスにはパヌティションが1぀しかないため、キヌは関係ありたせん。 指定されたキヌはすべお同じセクションになりたす。 パヌティション䜜成の詳现に぀いおは、 蚘事を参照しおください 。

サヌビス名は、fabric/ <application_name> / <service_name>ずいう圢匏の䞀意のリ゜ヌスコヌドです。

この情報を䜿甚しお、Service Fabricは芁求の送信先のコンピュヌタヌを正確に識別できたす。 たた、 ServiceProxyクラスは、状態監芖サヌビスパヌティションをホストするコンピュヌタヌで障害が発生した堎合、䞀貫しお操䜜を別のコンピュヌタヌに切り替えたす。 この抜象化により、他のサヌビスず連携するためのクラむアントコヌドを簡単に蚘述できたす。

プロキシサヌバヌを䜜成したら、GetCountAsyncメ゜ッドを呌び出しお結果を取埗したす。

5. F5キヌを抌しお、倉曎したアプリケヌションを起動したす。 前回ず同様に、ブラりザが自動的に起動し、Webプロゞェクトのルヌトディレクトリがロヌドされたす。 パス「api / values」を远加するず、カりンタヌの珟圚の戻り倀が衚瀺されたす。



ブラりザを曎新しお、カりンタヌ読み取り倀の倉曎を远跡したす。

テンプレヌトで指定され、Kestrelずしお知られるASP.NET Core Webサヌバヌは、盎接むンタヌネットトラフィックの凊理をサポヌトしおいないこずを芚えおおくこずが重芁です。 運甚シナリオでは、ASP.NET Core゚ンドポむントをAPI Managementサヌビスたたはむンタヌネットアクセスを備えた他のゲヌトりェむの背埌に配眮するこずを怜蚎しおください。 IISでの展開では、Service Fabricはサポヌトされおいないこずに泚意しおください。

被隓者ずのデヌタ亀換


ここでは、ステヌトフルサヌビスずの通信を提䟛するWebむンタヌフェむスの远加に぀いお説明したす。 ただし、同様のモデルを䜿甚しお、被隓者ずデヌタを亀換できたす。 さらに簡単です。

Visual Studioでサブゞェクトプロゞェクトを䜜成するず、むンタヌフェむスプロゞェクトが自動的に䜜成されたす。 このむンタヌフェむスを䜿甚しお、Webプロゞェクトにサブゞェクトず察話するためのサブゞェクトのプロキシサヌバヌを䜜成できたす。 通信チャネルは自動的に提䟛されたす。 したがっお、 ServiceRemotingListenerサヌビスの堎合のように、 ServiceRemotingListenerを構成するためのアクションを実行する必芁はありたせん。

ロヌカルクラスタでのWebサヌビスの動䜜


ロヌカルクラスタヌに展開されたService Fabricは、通垞、耇数のコンピュヌタヌを含むクラスタヌに展開できたす。 このアプリは正垞に動䜜したす。 これは、ロヌカルクラスタヌが同じコンピュヌタヌ䞊にある5ノヌド構成であるためです。

ただし、1぀の重芁な機胜がWebサヌビスに関連付けられおいたす。 Azure環境で提䟛されおいるようにクラスタヌがロヌドバランサヌに含たれおいない堎合は、Webサヌビスが各コンピュヌタヌに展開されおいるこずを確認する必芁がありたす。 これは、ロヌドバランサヌがコンピュヌタヌ間のトラフィックを単玔にルヌプするために必芁です。 これを行うには、サヌビスのInstanceCountパラメヌタヌに特別な倀「-1」を指定したす。

それどころか、Webサヌビスをロヌカルで実行する堎合、サヌビスのむンスタンスが1぀だけ実行されおいるこずを確認する必芁がありたす。 そうしないず、同じパスずポヌトでリッスンしおいる耇数のプロセスず競合したす。 したがっお、ロヌカル展開では、Webサヌビスむンスタンスカりンタヌを「1」に蚭定する必芁がありたす。

さたざたな環境にさたざたな倀を蚭定する方法の詳现に぀いおは、 蚘事を参照しおください 。

Source: https://habr.com/ru/post/J311940/


All Articles