質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

5回答

16438閲覧

クライアント端末の通信は、直接DBに接続するか、WebAPIを経由すべきか...?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

2クリップ

投稿2017/06/22 14:53

編集2017/06/22 14:56

近いうちに、Windowsタブレット(通常のWindowsPCと変わりませんが。。。)を使った業務系アプリケーション(工場で利用する想定)を開発します。
そこで、クライアント端末側で直接データベースに接続するか、
サーバー側でWEBAPIを作り、サーバー側で処理を行い結果をJSON等で返却するようにしようか悩んでいます。
皆様なら、どういう構成にしますか?
メリット・デメリット等あると思いますが、理由も併せてご回答いただけると嬉しいです。

★ クライアントの構成
OS:Windows 10
開発言語:C#(WPFで作成予定)

★サーバーの構成
OS:Linux(Cent OS)
フレームワーク: ASP.NET MVC Core
データベース: PostgreSQL

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

工場で使うアプリということで、ユーザー数は少ないと思います。
もしユーザーが多く負荷が高い場合は「Web APIを作り、Webサーバー側で処理を行い結果をJSON等で返す」が良いでしょう。

  • Web APIにすると同じクエリに対する結果のキャッシュが簡単(高速&DB負荷低減)

キャッシュが全く効かないようなアプリの場合、高速化/負荷低減のメリットはないので直接DBにアクセスした方が良いように見えます。

もしセキュリティが重要ということであればWeb APIが良いかも知れません。

  • Webサーバーを経由することにより、DBサーバーへの直接アクセスを防止できる。

-- APIを経由することによりDBに対する操作を制限できる。
-- DBサーバーへの直接ログインを無くせる。(PostgreSQLにも稀に権限昇格などの脆弱性がある)

  • ユーザー管理/責任追跡/否認防止はWebアプリの方が簡単かも知れない。

-- 直接DBに接続でき、DBのユーザーIDが漏洩した場合、簡単に何でも出来てしまうかも知れない。PostgreSQLの脆弱性はありまり多くありませんが、時々見つかっています。ユーザー権限(アクセスできるテーブルなど)管理の手間も無視できないかも知れない。
-- セキュリティ要素として責任追跡/否認防止が必要な場合、DBサーバーにシステムユーザー毎にDBユーザーアカウントを作ることになる。PostgreSQLで多数のユーザーを管理するのは結構手間になるかも知れない。

  • Webサーバーを経由する方が可用性を維持し易いかも知れない。(ホットスタンバイの切り替えなど)

システム要求仕様が不明なのでほとんど「かも知れない」です。これらが重要な場合かつWeb APIの方が都合が良い場合はWeb APIにした方が楽だと思います。

もし、直接DBに接続する方が色々と都合が良い(既に直接DBアクセスするアプリがあり、DBユーザーの管理をきっちりやっている等)場合は直接DBに接続する方が良いと思います。

投稿2017/06/27 08:39

YasuoOhgaki

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/27 11:27

ご回答ありがとうございます。 対象の企業が小さい会社で、システム化部門があるわけでもない状況です。 (今回はインターネット上に公開せず、イントラ内で動くアプリになります。) 僕が悩んでいた点は以下の点です。 DBに直接つなぐ場合:  クライアント端末に直接接続文字列が記載されるのに心理的抵抗がある。 WebAPIにする場合:  今回作成するアプリは比較的小規模、かつ、少ないメンバで開発するので、クライアント開発者と、サーバーサイド開発者が同一人物になりうるため手間となる(気がする) (今はWebAPIよりです。。。)
guest

0

前提条件が違うので参考にはなりませんが、
Mysql+WPFであれば直接コントロールできますし、高速で動作します。
(実績あり)

投稿2017/06/23 02:17

107User

総合スコア78

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/23 03:42

ご回答ありがとうございます。 レイヤーがひとつ減る分早くなりますよね。 今回開発するのが小規模なので、それでもいいのかなとも思ってたりします。。。
guest

0

サーバー側が Linux、ASP.NET Core、PostgreSQL ということなのでいろいろ制約がありそうですが(Core で使えるプロバイダがあるのかとか?)、それを考えなければ、

Client (Borwser) ⇒ Web Server(ASP.NET MVC Core)⇒ DB Server (PostgreSQL)

という構成が良いと思います。

メリットは、

(1) アプリは全てサーバー側で管理可(クライアントのアプリの保守は不要)

(2) クライアントはブラウザさえあれば Windows 端末でなくても OK

・・・と言ったところでしょうか。

デメリットは、クライアントを WPF にするのに比べれば、なさそうに思います。

上に「いろいろ制約がありそう」と書いた件については、PostgreSQL には触ったこともない自分は知識がないのですが、ASP.NET MVC Core と PostgreSQL の間を取り持つプロバイダ / ドライバが完備しているかということが一番気になるところです。

(.NET Framework ベースなら Npgsql というものが用意されていて Entity Framework も使えるそうですが・・・)

Core で使えるプロバイダ / ドライバがないということですと、以下のような構成にせざるを得ないと思います。

Client (.NET + WPF + Npgsql) ⇒ DB Server (PostgreSQL)

投稿2017/06/23 00:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/23 01:11

ご回答ありがとうございます。 NpgsqlのCore版があって一応検証済みです(Linux上で)! ASP.NET MVC CoreがでたのでWindowsサーバーを避けて、コストを下げようとしてちょっと変な構成になってます(汗 もうc#にこだわる必要もないのではという気もしなくはないのですが... Web側だけPHPなどのスクリプト言語でもよいかもとはちょっと思ってます。。。
退会済みユーザー

退会済みユーザー

2017/06/23 02:06 編集

> NpgsqlのCore版があって一応検証済みです(Linux上で)! 了解しました。情報をありがとうございます。 たぶん、Entity Framework も使えるのではないかと想像していますが、そうであれば、上の回答に述べた Client (Borwser) ⇒ Web Server(ASP.NET MVC Core)⇒ DB Server (PostgreSQL) の構成がよさそうだと思います。
guest

0

ベストアンサー

WPFでアプリを書くならダイレクトにDBにアクセスする方が楽ですよとコメントするところですが、PostgreSQLだとNpgsqlを使うことになると思うので、素直に定番の環境でWebAPIを書いた方がよいかもしれませんね
ハマりどころが少なくなるのではという意味で

あとWebAPIを使うと(特にJSON)型情報を持ちまわるのに面倒だったりすることがありますね
そういう意味ではWCFが使えると相当楽ですけど

あまり聞かない=知見が少ないなので、ハマるといろいろ自分でやらないといけない
→業務アプリケーションは定番構成を選択しておいた方がいいと思いますよ

もちろんいろんな挑戦を否定するわけではありません

投稿2017/06/22 21:09

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/23 01:13

ご回答ありがとうございます。 業務系はハマらないように、というのは確かにありますね。。。 納期間近にやばっとなったときの緊張感...。
退会済みユーザー

退会済みユーザー

2017/06/23 01:14

> WebAPIを使うと(特にJSON)型情報を持ちまわるのに面倒だったりすることがありますね ASP.NET Web API ではクライアント/サーバー間のデータのやり取りは黙って JSON になるはずなのですが(具体例は下記記事参照)、ASP.NET Core では変わっていて「面倒だったりする」ということがあるのでしょうか? そのあたりの情報をお持ちでしたら教えていただけると幸いです。 ASP.NET Web API を使ってみよう: MVC 4 新機能シリーズ https://blogs.msdn.microsoft.com/chack/2012/02/24/asp-net-web-api-mvc-4-2/ > WCFが使えると相当楽ですけど JSON データのやり取りが楽になるということですか? WCF + JSON というのは自分も実装したことがありますが(以下の記事参照)、JSON を使うという点に関しては ASP.NET Web API の方がはるかに楽でした。この辺り、自分の理解は間違っているのでしょうか? WCF と jQuery AJAX http://surferonwww.info/BlogEngine/post/2015/10/15/wcf-and-jquery-ajax.aspx
退会済みユーザー

退会済みユーザー

2017/06/23 01:23

データの形式は「JSON」です。(XML等にも変えれるのかも?未検証です) ASP.NET MVC Coreの印象としては、出力をJSONにするのは全然難しくありませんでした。 WebAPI用のコントローラがあり、データを保持しているクラスを返却するだけで、自動でJSONに変換してくれます。 コントローラを作成する側としては、JSONを出力しているかどうか意識する必要がないレベルです。 WCFも同じようなものだと記憶していますが、より意識する必要がなくなっているのかなと思ってます! ASP.NET MVC Coreについては、おそらく様子見している人が多いのか、情報が少ないと感じてます。 (Linux等で動かすので.NET Framwork上ではなくなりますし、変更が多いです。。。) そこが欠点ですね。。。 Windowsサーバーで.NET Framwork上で動かすのが最善だとは思います。。。 ただこんなニュースも。 ASP.NET Coreが.NET Frameworkサポートを終了 https://www.infoq.com/jp/news/2017/06/ASPNET-Core-2
退会済みユーザー

退会済みユーザー

2017/06/23 01:46

> ASP.NET MVC Coreの印象としては、出力をJSONにするのは全然難しくありませんでした。 情報をありがとうございました。そこのところは .NET Framework ベースの ASP.NET Web API と変わってないようですね。 > WCFも同じようなものだと記憶していますが、より意識する必要がなくなっているのかなと思ってます! 上のコメントで紹介した記事「WCF と jQuery AJAX」にも書きましたが、WCF は例えば "ResponseFormat = WebMessageFormat.Json を設定して、応答に XML ではなく JSON を明示的に指定します" というように、かなり意識しないとダメなようです。 > ASP.NET MVC Coreについては、おそらく様子見している人が多いのか、情報が少ないと感じてます。 実は自分も様子見です。構成ファイル他の変更が多くて今までの知識では歯が立たないし、以下のような不具合(?)もまだ残っているようですし、業務上の差し迫った必要もないですし。(笑) ASP.NET Core で文字化け http://surferonwww.info/BlogEngine/post/2017/06/16/decoding-problem-caused-by-view-created-by-scaffolding-in-aspnet-core-project.aspx > ただこんなニュースも。 > ASP.NET Coreが.NET Frameworkサポートを終了 それは知りませんでした。情報をありがとうございます。やっぱり自分はもうしばらく様子を見ることにします。
退会済みユーザー

退会済みユーザー

2017/06/23 02:13

ASP.NET MVC だとデフォルトで「JSON」なので楽かもしれませんね! > 実は自分も様子見です。構成ファイル他の変更が多くて今までの知識では歯が立たないし、以下のよう> な不具合(?)もまだ残っているようですし、業務上の差し迫った必要もないですし。(笑) > > ASP.NET Core で文字化け > http://surferonwww.info/BlogEngine/post/2017/06/16/decoding-problem-caused-by-view- > created-by-scaffolding-in-aspnet-core-project.aspx 事例があまりなく、まだ安定していないので悩ましいところではあるんですよね。 リスク考えるとWindowsサーバー+SQLServer + ASP.NET MVC5(.NET Framework)無難ですよね・・・。 悩みが増えていきます。。。
dojikko

2017/06/23 08:42

> ASP.NET Core では変わっていて「面倒だったりする」ということがあるのでしょうか? そんなに深い考えではなく、JSONを扱うのは面倒くさくないですかという意味で書きました 私だけの思い込みかもしれません ASP.NET Web APIだとシリアル化の形式をJSONからXMLに変更できますけど、ASP.NET MVC Coreではどうなんでしょう?
退会済みユーザー

退会済みユーザー

2017/06/23 09:35

JSONにするのは全然難しくない感じです。 基本的にはASP.NET MVCの延長戦上みたいな感じです。 .NET Framwork上で動くわけではなくなるので、環境構築や既存の資産が使えなくなる(まだ対応しているライブラリは少ないように思えます)のが痛いところですね。。。 予算があまりない小規模な案件ということもあって、採用を検討しているところですが、 少し大きい案件でしたら、Windowsサーバー等を使った方が無難な印象です! XMLも対応できるみたいです。 ASP.NET Core MVC の Web API で XML 形式のデータを扱う http://www.moonmile.net/blog/archives/7963
guest

0

入出力の一元管理や定番のセキュリティで済む、WEBAPIでいいんじゃないですかね。
機能限定版を、Webで作ってというのも対応できますし。

UWPでは、WEBAPIのみなので、それが時代の潮流なんだと思います。
(安いWinタブレットはUWPのみとかこれからありそうですし)

投稿2017/06/22 15:28

編集2017/06/22 18:20
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/22 23:50

ご回答ありがとうございます。 UWPは、データベースに接続するAPIがないんでしたよね! 業務系アプリケーションでUWPか、WPFかでも悩んだりしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問