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を使用すると、最小限の労力でこの奇跡を整理できます。 そして、あなたが少し精通しているなら、たくさんのリクエスト\コマンドとハンドラーが自動的に行われ、それから魔法が完了します:)