WCF वास्तव में बहुत ही शक्तिशाली चीज है, लेकिन नई परियोजनाओं के लिए, हम नई, समान वेब सेवाओं को बनाने के लिए मजबूर हैं। इस लेख (अनुवाद) में हम देखेंगे कि
नेलीबुर का उपयोग करके एक पुन: उपयोग योग्य
संदेश आधारित वेब सेवा कैसे बनाई
जाए । नेलीबुर शुद्ध WCF पर एक संदेश आधारित वेब सेवा ढांचा है। आइए देखें कि नेलिबुर का उपयोग करके डब्ल्यूसीएफ पर वेब सेवाओं का निर्माण कैसे शुरू किया जाए।
चरण 1. एक आवेदन बनाएँ
सादगी के लिए, WCF सेवा कंसोल एप्लिकेशन को होस्ट करेगी। तो बस एक नया कंसोल प्रोजेक्ट जोड़ें।

चरण 2. नेलिबुर स्थापित करें
नालिबुर को स्थापित करने का सबसे आसान तरीका
NuGet पैकेज मैनेजर का उपयोग करना है।

आप
पैकेज मैनेजर कंसोल के साथ भी ऐसा कर सकते हैं

अब हम एक RESTful WCF संदेश आधारित सेवा बनाने के लिए तैयार हैं।
चरण 3. एक WCF सेवा बनाएँ
उदाहरण के लिए, हम WCF सेवा के लिए निम्नलिखित आवश्यकताएं लेते हैं:
नेलीबुर में पहले से ही लागू कार्यान्वयन की आवश्यकता है:
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>
हम व्यापार तर्क को लागू करते हैं
हमारी सेवा में सक्षम होना चाहिए:
- जहाज जोड़ें
ShipId
द्वारा जहाज प्राप्त करें
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 अनुरोध का उपयोग करना):

शिपआईडी द्वारा जहाज प्राप्त करना (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 का इस्तेमाल किया। नेलीबुर आपको न्यूनतम श्रम के साथ इस चमत्कार को व्यवस्थित करने की अनुमति देता है। और अगर आप थोड़ा समझदार हैं, तो रिक्वेस्ट \ कमांड और हैंडलर्स का एक गुच्छा अपने आप हो सकता है और फिर जादू पूरा हो जाएगा :)