■97044 / inTopicNo.5) |
Re[1]: クラウドでDBの使用方法 |
□投稿者/ 魔界の仮面弁士 (3017回)-(2021/03/19(Fri) 12:48:38)
|
2021/03/19(Fri) 12:56:45 編集(投稿者)
■No97040 (gnew さん) に返信 > ・クラウド側に、SQLの実行およびその結果をXML等で返すようなWeb APIを作成 > ・WinForm側は、Web APIに必要パラメータをPOSTしてそのレスポンスを受け取る > (Http Clientを使用?) > ということをイメージしています。
自分のところだと、昔ながらの SOAP を使っているケースと、 Swagger を使っているケースがあります。(WCF は使ってない) サーバー側は IIS。
これらの手法だと、XML 化や JSON 化は勝手に行われるので、 フォーマットそのものを意識する必要はあまり無いです。 クライアント側も、各クラスのメソッドを呼ぶだけで、 プログラムから、随時 URL を直接組み立てたりする必要もありません。
=== SOAP の場合 ===
前者(SOAP)は古くからある実装で、XML によるデータ交換です。 XML はデータが肥大化しやすい傾向にあるのと、生データの目視性が悪いので、 自分の所では、新規案件ではあまり採用していません。 https://www.atmarkit.co.jp/fdotnet/chushin/introwinform_10/introwinform_10_01.html http://square.umin.ac.jp/hiroino/oldsite/webservenote1.html
サーバー側は、ASP.NET 側で [新しい項目の追加] - [Web サービス (ASMX)] を追加して、 <WebMethod()> Public Function Get何某(引数) As 型付DataSet <WebMethod()> Public Function Update何某(ds As 型付DataSet) As 更新結果 なメソッドを追加するだけ。
受け渡しは 別に型付 DataSet でなくても、Integer でも String でも List(Of ) でも自作クラスでも OK です。 ただし永続化処理の都合上、DataTable を単体で Return するのはあまりお奨めしません。
完成すると、こんな感じの Web API が出来ます。 http://www.dneonline.com/calculator.asmx
SOAP クライアントの方は、VB の参照設定時に[参照の追加]ではなく [Web 参照の追加] を 選べば、上記の .asmx な URL の Web サービスを参照設定できます。 ただしそれは 2008 ぐらいの世代まで。最近の VB だと階層が深くなっていて、 まず [サービス参照の追加]を選び、ダイアログ左下の [詳細設定] から [サービス参照設定]を開かないと、[Web 参照の追加] 画面に辿り着けません。
で、[Web 参照の追加] 画面まで来たら、.asmx な URL を入れた後、 Web 参照名の欄に任意の文字列を入れて、[参照の追加]を選択。
そうすればあとは、 Dim result = My.WebServices.Calculator.Add(10, 20) のような感じで利用できます。サーバー側の実装がどうなっているのかは あまり意識しないで済みます。
=== Swagger の場合 ===
これ自体は REST API による通信ですが、SOAP における ASMX のように、 メソッド定義を参照可能な情報として公開できるので、プログラムから呼びやすいです。
後者の資料としてはこのあたり。 自分は .NET Framework 版の ASP.NET Core MVC で実装しています。認証処理は JwtBearer を選択。 http://blog.studio-odyssey.net/2017/11/aspnet-core-20-web-api-client-.html https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.1&tabs=visual-studio
バージョンごとに若干の癖があるようで、ASP.NET Core MVC の場合は、 ApiContoller クラスは通常使わないようです(ASP.NET 4.x Web API 2 互換)。
ASP.NET Core 2.0 だと、MVC コントローラーと API コントローラーの両方とも、 Controller クラスから継承します。
ASP.NET Core 2.1/2.2 だと、 MVC コントローラーは Controller から継承され、 API コントローラーは ControllerBase から継承されます。
Public Class MyMvc21Controller : Inherits Controller <Route("api/[controller]")> Public Class MyApi21Controller : Inherits ControllerBase Web メソッドの戻り値は、Sub でも良いし、Function にするなら As T / As ActionResult(Of T) / As ActionResult など。
HTTP Status として 200 OK しか返さないなら、Sub か As T で良いですが、 データの構成によって 200 以外も返したいなら ActionResult 推奨。
Web 側を実装すれば swagger.json が自動生成されるので、それを https://editor.swagger.io/ に放り込んで、[Generate Client]-[csharp] を選べば、 .NET Framework 4.x 向けの DLL プロジェクトがダウンロードできます。
それ自体は C# なソースですが、それをそのまま VB からプロジェクト参照すれば、 Dim api As New IO.Swagger.何某.何某() Dim data = api.Get何某(…) api.Put何某(…) みたいにして、普通のクラスのように利用できます。
IIS 以外の環境(.NET 以外)のクラウド環境で開発する場合も、 サーバー側として SOAP や Swagger を選択して連携することができます。
もちろんこうしたフレームワークを用いず、 REST API を直接サーバー側に実装するという選択肢もアリ。
なお、非 .NET 環境で生成した SOAP 実装の場合、XML 構造によっては、 VB の [Web 参照の追加] で解釈できないケースがあるので注意が必要です。 (そもそも、ASMX を公開しない SOAP 実装もありますが…)
|
解決済み
|