WCFおよびNeliburでRESTful Webサービスを開始する

WCFは本当に強力なものですが、新しいプロジェクトでは何度も何度も、新しい類似のWebサービスを作成する必要があります。 この記事(翻訳)では、 Nelibur 使用して再利用可能なRESTful メッセージベースの Webサービスを作成する方法を説明します。 Neliburは、純粋なWCF上のメッセージベースのWebサービスフレームワークです。 Neliburを使用してWCFでWebサービスの作成を開始する方法を見てみましょう。



ステップ1.アプリケーションを作成する



簡単にするために、WCFサービスはコンソールアプリケーションをホストします。 したがって、新しいコンソールプロジェクトを追加するだけです。





ステップ2. Neliburをインストールする



Neliburをインストールする最も簡単な方法は、 NuGetパッケージマネージャーを使用することです。





パッケージマネージャーコンソールでも同じことができます





これで、RESTful WCFメッセージベースのサービスを作成する準備が整いました。



ステップ3. WCFサービスを作成する



たとえば、WCFサービスには次の要件があります。



Neliburには、必要な実装JsonServicePerCallが既に含まれています。

そのため、サービスの起動コードを追加します。

 internal class Program { private static WebServiceHost _service; private static void Main() { _service = new WebServiceHost(typeof(JsonServicePerCall)); _service.Open(); Console.WriteLine("ShipTrackingService is running"); Console.WriteLine("Press any key to exit\n"); Console.ReadKey(); _service.Close(); } }
      
      





構成を規定します

 <system.serviceModel> <services> <service name="Nelibur.ServiceModel.Services.Default.JsonServicePerCall"> <host> <baseAddresses> <add baseAddress="http://localhost:9095/ShipTrackingService" /> </baseAddresses> </host> <endpoint binding="webHttpBinding" contract="Nelibur.ServiceModel.Contracts.IJsonService" /> </service> </services> </system.serviceModel>
      
      







ビジネスロジックを実装します



私たちのサービスは次のことができるはずです。



AddShipCommand



作成する

 public sealed class AddShipCommand { public string ShipName { get; set; } }
      
      





コマンドの結果はShipInfo



オブジェクトである必要があります

 public sealed class ShipInfo { public Guid Id { get; set; } public string Name { get; set; } }
      
      





ShipLocationQuery



クエリを追加します。結果はShipLocation



オブジェクトになります

 public sealed class ShipLocationQuery { public Guid ShipId { get; set; } } public sealed class ShipLocation { public string Location { get; set; } public Guid ShipId { get; set; } }
      
      





ここで、コマンドとリクエストハンドラを作成する必要があります

 public sealed class ShipProcessor : IPost<AddShipCommand>, IGet<ShipLocationQuery> { private static readonly Dictionary<Guid, Ship> _ships = new Dictionary<Guid, Ship>(); public object Get(ShipLocationQuery request) { if (_ships.ContainsKey(request.ShipId)) { return new ShipLocation { Location = "Sheldonopolis", ShipId = request.ShipId }; } throw new WebFaultException(HttpStatusCode.BadRequest); } public object Post(AddShipCommand request) { var ship = new Ship(request.ShipName, Guid.NewGuid()); _ships[ship.Id] = ship; return new ShipInfo { Id = ship.Id, Name = ship.Name }; } }
      
      





コマンドをバインドし、ハンドラーに要求します

 internal class Program { private static WebServiceHost _service; private static void ConfigureService() { NeliburRestService.Configure(x => { x.Bind<AddShipCommand, ShipProcessor>(); x.Bind<ShipLocationQuery, ShipProcessor>(); }); } private static void Main() { ConfigureService(); _service = new WebServiceHost(typeof(JsonServicePerCall)); _service.Open(); Console.WriteLine("ShipTrackingService is running"); Console.WriteLine("Press any key to exit\n"); Console.ReadKey(); _service.Close(); } }
      
      





すべて、サービスは終了しました。 お気づきのように、WCFサービスを変更せずに任意の操作を追加できます...



WCFサービスを使用しているクライアント



クライアントとして、次を使用できます。



フィドラー



新しい船の追加(POSTリクエストを使用):





ShipIdによる船舶の受け取り(GETリクエストを使用):





JsonServiceClient



クライアントを作成するには、別のコンソールアプリケーションを追加します。

クライアントコードは次のとおりです。

 internal class Program { private static void Main() { var client = new JsonServiceClient(Settings.Default.ServiceAddress); var shipInfo = client.Post<ShipInfo>(new AddShipCommand { ShipName = "Star" }); Console.WriteLine("The ship has added: {0}", shipInfo); var shipLocation = client.Get<ShipLocation>(new ShipLocationQuery { ShipId = shipInfo.Id }); Console.WriteLine("The ship {0}", shipLocation); Console.ReadKey(); } }
      
      





クライアントを起動し、実行の結果を確認します。



サービス側で





クライアント側





さらに読む







それだけです



楽しんでいただけましたでしょうか。 記事を読んでくれてありがとう(翻訳)。

ソースはオリジナルからダウンロードできます。



翻訳者から



記事を読むときは、一連のリクエストとハンドラーのコードに注意することをお勧めします。

  private static void ConfigureService() { NeliburRestService.Configure(x => { x.Bind<AddShipCommand, ShipProcessor>(); x.Bind<ShipLocationQuery, ShipProcessor>(); }); }
      
      





サービスへの新しい機能の追加は、リクエスト/コマンドクラス、ハンドラクラス、およびそれらのバンドルの作成に限定されます。 キュートなハートCQRSを簡単かつ簡単に整理して使用します。 Neliburを使用すると、最小限の労力でこの奇跡を整理できます。 そして、あなたが少し精通しているなら、たくさんのリクエスト\コマンドとハンドラーが自動的に行われ、それから魔法が完了します:)



All Articles