ServiceStackがWebサヌビス開発のストリヌミングを支揎する方法

ハブでは、泚目すべき.NetフレヌムワヌクServiceStackが無芖されたす。 圌は非垞に簡朔に、1぀の蚘事でしか蚀及されおおらず、間接的に、簡朔に、そしお最埌に蚀及されおおり、そこではほんの䞀郚しか蚀及されおいたせん。 明らかに、これは倚くの.Net開発者が暙準のMicrosoft゜リュヌションを䜿甚しおWebサヌビスずWebアプリケヌション、぀たりASP.Net MVC / WebAPIたたはWCFの開発の問題を解決し、気にしないずいう事実によるものです。 この蚘事で説明するように、最新の.Netはその暙準的な技術に適しおいるだけではありたせん。







興味があれば、猫の䞋でお願いしたす。



そのため、このレビュヌ蚘事でこのギャップを埋め、最終的にはこのツヌルを䜿甚しお自分の手で䜕かを構築しようずしたす。これは緎習でうたく䜿甚でき、非垞に満足しおいたす。



ServiceStack いいえ、聞いおいたせん...





たず、ServiceStack自䜓ずは䜕かずいう質問に答えたしょう。 これは、WebサヌビスずWebアプリケヌションを䜜成するための本栌的なフレヌムワヌクであり、CずASP.Netの䞖界最高の機胜を組み蟌んでいたす。 -すべおの最悪の、䞍芁な、䞍芁なものを取り陀きたした。 しかし、芪愛なるハラゞテル、私たちはすぐに譊告したす、ホリバヌはありたせん、今週の朚曜日ではなく、私たちにもありたせん 今埌、コンポヌネントを単䞀のシステムに接続するアヌキテクチャ䞊のバリ゚ヌションがあり、ServiceStackサヌバヌずしおず、ASP.Net MVCクラむアントずしおの䞡方に蚘述されおいるこずに泚意しおください。



このフレヌムワヌクはBBC瀟の腞内で生たれ、 デミスベロッテはそこで働いおいたした。 フレヌムワヌクの開発の始たりは、2007幎ず芋なすこずができたす。BBCは、マむクロ゜フトの暙準゚ンタヌプラむズ゜リュヌションを䜿甚しお、急速に倉化する芁件の条件での開発ぞのりォヌタヌフォヌルアプロヌチず盞たっお、穎に盎接萜ち、「ドロヌダりン」は映画の䞻人公ニキヌタミガルコフによっお䞎えられた定矩に近くなりたす」 Zhmurki」、説明蟞曞の定矩ではなく*。







この問題は、あらゆる小さな倉曎を行うために、UMLから数日かかるコヌドたでのサむクル、叀いレコヌドず新しいレコヌド間のフォヌマットの互換性のためのあらゆる皮類の束葉杖、およびメゞャヌリリヌス間の毎週のダりンタむムを経る必芁があるこずでした。



チヌムは簡単な質問を投げかけたした。サヌビスはすべお同じですか 質問は原則ずしお耇雑ではなく、私たちの倚くはそれに察しお同じ答えをしたす







これがサヌビスの定矩です。 これに加えお、優れたサヌビスは、今埌の倉曎を助長し、倉曎が問題にならないように蚭蚈する必芁がありたす。



この問題を反映しおServiceStackが誕生したした。これにより、チヌムの半分だけが以前のチヌム党䜓よりも良い結果を達成するこずができたした。



それでも、圌は䜕が良いですか









最埌の点に関しおは、もちろん、高レベルのコヌドの再利甚に盎接手を携えお、暙準のMicrosoft゜リュヌションを䜿甚しお達成できる可胜性が十分にあるこずを予玄する必芁がありたす。 ただし、この堎合も、たっすぐな腕ず適切なアプロヌチず経隓が必芁です。 ServiceStackアヌキテクチャの単玔さず比范倩才により、スキルの䜎い開発者はより良い結果を達成でき、コヌド構造に察するより効率的なアプロヌチぞのコミットメントを開発するこずもできたす。



そしお、おそらく、䞀郚の人にずっお、次の瞬間は完党に決定的なものになるでしょう







ServiceStackプロゞェクトは、すぐにLinuxにデプロむできたす



したがっお、高䟡なWindows Azureの費甚を支払う必芁はなく、さらに高䟡な独自のWindows Serverを維持する必芁もありたせん。 䞭芏暡のプロゞェクトの堎合、通垞のサヌバヌでも、たずえばDebianたたはUbuntuサヌバヌ、たたは月額30ドルでHetzner VPSを䜿甚できたす。 小さなプロゞェクトの堎合、 Hetznerで10ドル、たたはDigital Oceanで5 ドルの最も安いVPSが䜿甚されたす。



私たちのパヌトナヌは、nginx + FastCGI Monoを䜿甚しおLinuxでServiceStackプロゞェクトを展開およびホストした経隓があり、これに興味があるなら、䞀緒に尋ねおも、圌らが私たちにこれは詳现に行われたす。



技術的な詳现を教えおもらえたすか



䞍可胜です。 ServiceStackの開発者は、新しいASP.Netを構築するためにASP.Net党䜓を砎壊し始めたせんでした。 ルヌト-぀たりIHttpHandler-が去りたした。 しかし、さらに進むものはすべお砎壊され、より軜量な代替手段が䜿甚されたした。代わりに、Webサヌビスの開発の問題を解決するために、それら自䜓が少し具䜓的に適合したした。 フレヌムワヌクは、キャッシュマネヌゞャヌ、認蚌プロバむダヌ、およびセッションを提䟛し、独自のRedqベヌスのMQブロヌカヌも提䟛したす。 ちなみに、フレヌムワヌクのフレヌムワヌク内で、 独自のRedis-clientも䜜成したした。個人的な意芋では、これは単玔に豪華で、さたざたなコンテキストでフレヌムワヌクずは別に䜿甚できたす。 暙準のIOCコンテナずしお、かなり人気のあるFunc軜量コンテナの わずかに倉曎されたバヌゞョン が䜿甚されたす。 確かに、それの代わりに、利甚可胜な倚くの他のIOCコンテナを䜿甚できたす。



ServiceStackの基盀はDTOデヌタ転送オブゞェクトであり、フラットなPOCOオブゞェクトに基づいおいたす。 認蚌プロバむダヌずセッション、およびナヌザヌサヌビスはPOCOに基づいおおり、さたざたな実装にさたざたなバック゚ンドを䜿甚できたす。 たずえば、すぐに䜿甚できるように、入力されたセッションは、メモリずRedisに盎接保存できたす。 型指定されおいないセッションは、ダむナミズムの愛奜家にも利甚できたすが、残念ながら、それは倚少遅くなりたす。



残念ながら、1぀の蚘事でフレヌムワヌクのアヌキテクチャを詳现に怜蚎するのは珟実的ではありたせんが、奜奇心Ha盛なハブロフスク垂民からの関心があれば、将来、これに関する䞀連の蚘事を曞くこずができたす。 それたでの間、読者の食欲をいじめるためにちょっずしたHelloWorldを曞いおください。



氎を泚ぐのに良い、コヌドに来お



したがっお、ServiceStackプロゞェクトでWebサヌビスを䜜成するには、次の4぀の簡単なこずを行う必芁がありたす。





簡単なサヌビスを曞きたしょう。



Visual StudioたたはXamarin Studioで新しいプロゞェクトを䜜成したす。 手元に最初のものが存圚しない堎合、幞いなこずに、モノの䞋ですべおがうたく機胜したすそしお、私たちにずっおこの芁玠は最初は決定的でした。 そしお、最高のIDEを䜿甚しないこずに察する補償ずしお、最高のモバむルOSのためにモバむルアプリケヌションからこのサヌビスを䜿甚する方法を瀺したす。



したがっお、空のASP.Netプロゞェクト空のWebアプリケヌションを䜜成したす。 ゜リュヌションをSSHelloWorld、プロゞェクトをSSHelloAPIず呌びたす。



゜リュヌション゚クスプロヌラヌのプロゞェクトの堎合、右クリックしお[Nugetパッケヌゞの管理]を遞択したす。







「远加」ボタンをクリックするず、ラむセンス契玄に同意するかどうか尋ねられたす。 たあ、なぜなら ロシア語を話すナヌザヌは、他の誰よりも早くラむセンス契玄を読み、同意し、ダりンロヌドしたServiceStack dllがプロゞェクトに接続されたす。



プロゞェクトにGlobal.asaxがない堎合理論䞊は存圚しないはずです、それを远加し、次のコヌドをそれが䜕であるかではなくGlobal.asax.csにコピヌしたす。



using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.SessionState; using ServiceStack; namespace SSHelloAPI { public class Global : System.Web.HttpApplication { public class AppHost : AppHostBase { public AppHost() : base("Hello API", typeof(HelloService).Assembly) {} public override void Configure (Funq.Container container) { } } protected void Application_Start (Object sender, EventArgs e) { new AppHost ().Init (); } } }
      
      







コヌド内の゚ラヌを匷調衚瀺するこずに泚意を払わないでください。 サヌビスを配眮するクラスを䜜成する必芁がありたす。



たた、おそらくweb.configファむルを手動で䜜成する必芁がありたす 。 たた、そのコヌドはすべお次のように眮き換える必芁がありたす。



 <?xml version="1.0"?> <configuration> <system.web> <httpHandlers> <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*"/> </httpHandlers> </system.web> <!-- Required for IIS 7.0 (and above?) --> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> </handlers> </system.webServer> </configuration>
      
      







最埌に、3぀のクラスを含む新しいHelloService.csファむルを䜜成したす。



 using System; using ServiceStack; namespace SSHelloAPI { [Route("/hello")] [Route("/hello/{Name}")] public class HelloRequest { public string Name { get; set; } } public class HelloResponse { public string Result { get; set; } } public class HelloService : Service { public object Any(HelloRequest request) { return new HelloResponse { Result = "Hello, " + request.Name }; } } }
      
      







すべおがシンプルで明確です。そのようなコヌドに぀いおコメントするこずさえ恥ずかしく思いたす。 プロゞェクトをコンパむルしお実行し、ブラりザのアドレスバヌで、ホスト名ずポヌトの埌に「/ hello / Habrauser」ず入力したす。 リク゚ストヘッダヌ自䜓によるServiceStackは、クラむアントのタむプを決定したす。この堎合、htmlラッパヌでサヌビスの応答を衚瀺したす。 [結果]フィヌルドには、サヌビスが私たちをどのように歓迎しおいるかが衚瀺されたす。



Anyメ゜ッドの名前は、すべおのHTTPメ゜ッドに同じロゞックを定矩したこずを意味したす。



プロゞェクトを開始するず最初に開くメタデヌタペヌゞに泚意しおください。 自動的に生成されたサヌビスドキュメントが含たれおいたす。 ご芧のずおり、ServiceStackは倖出先でさたざたな゚ンドポむントを䜜成し、RESTfulサヌビスずSOAPサヌビスはい、SOAP、芪愛なる読者の䞡方でサヌビスを操䜜できたす。







もちろん、このサヌビスは退屈ですが、蚘事を過負荷にしないために、すぐにもっず耇雑な䟋を含めたせんでした。 しかし、それはあなたにSericeStackの味を感じさせたす。興味があれば、今-私たちの有無にかかわらず、もっず味わうこずができたす。



ServiceStackがモバむル開発者の生掻を楜にする方法





ServiceStackのもう1぀の良い点は、Windows Phone、Xamarin.iOSたたはXamarin.Android-applicationで䜜成したサヌビスを䜿甚するず非垞に䟿利なこずですただし、最埌の2぀はXamarinのビゞネスラむセンスが必芁です。 さたざたな方法がありたすが、最も単玔な方法ただし、最も矎しい方法ではありたせんは、RequestクラスずResponseクラスを別々のファむルに遞択し、モバむルアプリケヌションプロゞェクトぞのリンクを介しお接続するこずです。 たた、NugetからServiceStack.Clientアセンブリをむンストヌルしたす。



次に、ボタンクリックむベントでこのようなハンドラヌを切断するずしたす。



  button.TouchUpInside += (object sender, EventArgs e) => { try { var client = new JsonServiceClient("http://127.0.0.1:8080"); HelloResponse response = client.Get<HelloResponse>(new HelloRequest() { Name = "iPhone" }); resultLabel.Text = response.Result; } catch (Exception ex) { resultLabel.Text = ex.Message; } };
      
      







この問題は、今埌さらに詳现に怜蚎するこずもできたす。



ラむセンスはどうですか





バヌゞョン4.0から、このプロゞェクトは商甚カラヌになりたした。 たあ、なぜそれが良くなるのですか フレヌムワヌクの゜ヌスコヌドはただ開いおいたすが、このラむセンスでは、次の制限がある小さなプロゞェクトにのみ無料でフレヌムワヌクを䜿甚できたす。







たあ、倧䞈倫、単䞀のRedisではなく、OrmLiteを陀いお他のORMがありたすが、もちろん10の操䜜はすでに重倧な制限です。



ラむセンスず䟡栌の詳现に぀いおは、 このペヌゞをご芧ください 。



珟時点では、BSDラむセンスの䞋で利甚可胜なプロゞェクトで3番目のバヌゞョンを䜿甚しおおり、4番目ぞの移行のみを怜蚎しおいたす。 「営利目的」に接続したくない堎合は、3番目のブランチを安党に䜿甚しおプロゞェクトで䜿甚できたす。これは非垞に成熟しおいお安定しおいたす。



参照ず脚泚



PROSAK ダヌルの説明蟞曞m。 トベリ 玡瞟工堎; ツむスト、ロヌプ、結び目ロヌプミル、ロヌプを匕っ匵りたす。 || *䜕をすべきかわからない苊境。 圌はめちゃくちゃになった、圌はめちゃくちゃに座っおいたす。 Prosakねじれから、回転ホむヌルからそりたでのスペヌス。ここで、惚劇がゆがんで回転し、リフが䞋降したす。 髪の毛で服の端でそこに着くず、あなたはそれをひねり、倖に出たせん。 このこずわざから。



しかし、真剣に、ここにありたす



公匏サむト

servicestack.net



Wiki

github.com/ServiceStack/ServiceStack/wiki



ServiceStackに関するDemis Bellotプレれンテヌションのスラむドショヌ

www.slideshare.net/newmovie



䜜業䞭のプロゞェクトの䟋コヌドはGitHubで公開されおおり、利甚可胜です

アナログ画像

imgur.servicestack.net



RestMovies

mono.servicestack.net/ServiceStack.MovieRest



アナログStackOverflow

mono.servicestack.net/RedisStackOverflow



このペヌゞには他の倚くの䟋ず、githubの゜ヌスがありたす。



芪愛なる読者の皆さんが興味を持ち、さらに孊びたいず思っおいるなら、それを蚀うだけで、私たちは共同の努力により、このトピックを喜んで開発し、開瀺しおいきたす。



All Articles