C#

再戦 ASP.NET Core MVC vs. WCF

はじめに 以前 ASP.NET Core MVC と WCF のベンチマークを比較したことがあって、 そのときは WCF の方がかなり速いなぁ、という結果だった。 ASP.NET Core MVC が思いのほか遅いのが気になったけど、それに関しては当時調べず。 tnakamura.hatenablog.com …

ASP.NET Core のホステッドサービスとして WCF サービスを動かす

ASP.NET Core には HostedService という機能があって、 バックグラウンドタスクなんかを実装するのに使えたりする。 docs.microsoft.com 上のドキュメントでは、そのものずばりバックグラウンドタスクを実装しているわけだけど、 WCF サービスも実行できる…

GraphQL.NET の DataLoader

GraphQL でネストしたデータを取得するクエリを発行するとき、 N+1 問題を回避するために、 ネストしたデータの先読み込みか遅延読み込みを行う必要がある。 先読み込みの場合は、クエリのリゾルバ内で Entity Framework Core の Include を使って実装できる…

GraphQL.NET でのページネーション

GraphQL でコレクションデータの取得やページネーションを実現する場合、 Relay 由来の Connection や Edge といったインタフェースを定義するのが定石になっているみたい。 GraphQL.NET はそれらをサポートしていて、ConnectionType や EdgeType といった型…

HTTP.sys でホストした Web API で Windows 認証と JWT Bearer 認証を共存させる

ASP.NET Core MVC で実装した Web API を HTTP.sys でホストすることで、利用に Windows 認証が必要な Web API を実現できた。 tnakamura.hatenablog.com これでひと段落と思いきや、JWT Bearer 認証もサポートする必要が出てきたので、HTTP.sys でホストし…

ASP.NET Core アプリを HTTP.sys でホストして Windows 認証を使用するメモ

外に公開する Web アプリなら、ASP.NET Core Identity や JWT Bearer 認証を採用するんだけど、社内で使う用だとユーザー管理がめんどい。Windows 認証の方が都合がいい。クライアントはほぼ全て Windows だし、Active Directory で管理してるからなおさら。…

GraphQL Server で GraphQL.EntityFramework を使う

ASP.NET Core 用の GraphQL Server を使うことで、 ASP.NET Core プロジェクトに GraphQL API を実装するのが楽になりそうだった。 tnakamura.hatenablog.com ただ、ASP.NET Core MVC でエンドポイントを自作する必要はなくなるけど、resolver は依然書く必…

ASP.NET Core 用 GraphQL Server 実装

ASP.NET Core MVC を使って GraphQL API のエンドポイントを実装してきたけど、ASP.NET Core 用の GraphQL Server 実装が存在することを今更知った。 www.nuget.org 気分は某CMの松重豊。「それさぁ、早くいってよぉ~」って感じだ。 いやまぁ、ちゃんと調べ…

ASP.NET Core で GraphQL API の Mutation を実装する

以前、ASP.NET Core で GraphQL API のサンプルを実装してみた。 tnakamura.hatenablog.com 当時必要だったのはクエリだけだったので、ミューテーションは後回しにしていたけど、 とうとうミューテーションが必要になってしまった。 真面目に GraphQL API を…

.NET Core で形態素解析を行うメモ

.NET Core で日本語の文章の形態素解析がしたくなった。 日本語の形態素解析エンジンでまず思いつくのは MeCab。 その MeCab を .NET に移植した NMeCab を最初使うつもりだったんだけど、 残念ながら NMeCab は .NET Core にまだ対応していなかった。 それ…

.NET Core でログを Google Stackdriver に保存するメモ

.NET Core ではロギングに Microsoft.Extensions.Logging を使っていて、 コンソールや EventSource なんかによく出力していたんだけど、 今は Google Cloud Platform で遊んでいるので Stackdriver に保存したくなった。 NuGet 用に公式のパッケージがある…

.NET Core で Google Cloud Storage にファイルをアップロードするメモ

Microsoft Azure を使っていた頃は重要なファイルのバックアップ先に Azure Storage を利用していたが、 最近は Google Cloud Platform で遊んでいるので、Google Cloud Storage を使ってみることにした。 NuGet に公式のクライアントライブラリが存在するの…

ASP.NET Core と Entity Framework Core を使った GraphQL API の実装が楽になるかもしれないライブラリ GraphQL.EntityFramework

先日 ASP.NET Core で GraphQL API を実装してみた。 tnakamura.hatenablog.com データベースから Entity Framework Core を使ってデータを取得する部分は自前で書いたわけだが、なかなか面倒だったのでなんとかしたいところ。 例えば Ruby だと graphql-rub…

ASP.NET Core で GraphQL API

GraphQL API が必要になったので、ASP.NET Core で実装できるか試してみた。ライブラリは現状 GraphQL 一択。 www.nuget.org GraphiQL っていう、GraphQL を試すのに便利な Web UI があるので、それも利用した。ASP.NET Core のミドルウェアを使えば組み込む…

ASP.NET Core のキャッチオールルートパラメーターでハマった

例えば、はてなブログのカスタム URL みたいな、entry/ 以下にすべてマッチするルートを定義する場合、ASP.NET Core MVC だと下記のように書く。 [HttpGet("entry/{*path}")] public async Task<IActionResult> Details(string path) { // IIS Express は %2F を / に戻して</iactionresult>…

IdentityServer4 の認証を差し替える方法

はじめに 外部に公開する REST API の認証・認可に OpenID Connect を選択した場合、ASP.NET Core での実装には IdentityServer4 を使うことになると思う。IdentityServer4 は認証のバックエンドに ASP.NET Core Identity をサポートしているので、新規の開…

ASP.NET Core MVC vs. WCF

はじめに 以前 WCF と gRPC のベンチマークを比較して、結果 gRPC の圧勝だった。 tnakamura.hatenablog.com ASP.NET Core MVC(Web API) と WCF ではどっちが速いか気になったので試してみた。WCF のサービスは今のところ .NET Framework で動かすしかないの…

.NET で Firestore

Firebase を使ってアプリをサクッと作れるようになりたかったので勉強することにした。まずは Firestore。アプリは Xamarin で作るつもりなので、C# から Firestore を触ってみる。NuGet で専用のパッケージが公開されているので、それを使う。まだベータ版…

Swashbuckle.AspNetCore で Failed to load API definition に遭遇したら

開発中の Web API に後から Swashbuckle.AspNetCore を追加したはいいけど、いざ Swagger UI を表示してみたら「Failed to load API definition」というエラーになって API 一覧が見れない。こんな感じのやつ。 このエラーに遭遇したら、ググる前にまず swag…

Amazon Product Advertising API を使って Amazon の商品情報を取得する

C#

プログラムで Amazon の商品を検索したり、ASIN で商品情報を引っ張ってきたりしたくなったので、Amazon Product Advertising API を触ってみた。この API を呼び出すには、あらかじめ Amazon アソシエイトにログインして認証キーを取得しておく必要がある。…

Web スクレイピングではてなブロググループのブログ一覧を取得する

C#

はてなブロググループに登録しているブログの一覧を、 Web スクレイピングで取得するサンプルを書いてみた。 HTML のパースには AngleSharp を使用。 using AngleSharp.Dom.Html; using AngleSharp.Parser.Html; using System; using System.Linq; using Sys…

はてなブログの RSS フィードをダウンロードしてパースする

C#

はてなブログの RSS フィードをダウンロードしてパースするサンプルを書いてみた。 RSS フィードのダウンロードは HttpClient.GetStringAsync で一発。 RSS フィードは所詮 XML なので、パースは LINQ to XML でこれまた一発。 簡単過ぎてわざわざブログに書…

JwtBearer Authentication と ASP.NET Core Identity の 2 要素認証を無理やり組み合わせてみた

以前、JwtBearer Authentication の裏で ASP.NET Core Identity を使うことには成功した。 tnakamura.hatenablog.com ASP.NET Core Identity は 2 要素認証をサポートしているので、 JwtBearer Authentication を使う場合でもなんとか組み合わせることができ…

gRPC vs. WCF

C#

はじめに 仕事で開発に携わっているアプリでは通信に WCF を使っている。 一方で去年から Microservices やゲームのバックエンドとして gRPC が盛り上がっている。 gRPC は通信に HTTP/2 を使っていて、HTTP/2 はクライアントとサーバー間の通信がバイナリベ…

Entity Framework Core で値オブジェクトを実装する

C#

Entity Framework Core 2.0 の頃から既に値オブジェクトを実装する資料は存在した。 docs.microsoft.com ただ、自分がやりたかったのは「エンティティの ID を値オブジェクトにすること」だったので、 ちょっと違う。 Entity Framework Core 2.1 から追加さ…

JwtBearer Authentication の裏で ASP.NET Core Identity を使う

認証に ASP.NET Core Identity を使うけど、アプリ向けに JwtBearer の認証もサポートしたい。JwtBearer でトークンを発行するときは、ユーザーを認証するコードを書くことになるわけなので、そこで Identity の SignInManager や UserManager を使えばいい…

PostgreSQL で character(n) 型の列を主キーにしていたら Entity Framework Core で酷い目にあった

PostgreSQL で Entity Framework Core(Npgsql.EntityFrameworkCore.PostgreSQL) を使っていて、 テーブルの主キーの列に character(n) 型を使っていたら、 エンティティの更新に失敗して嵌った。 再現サンプルは下記の通り。 using Microsoft.EntityFramewor…

AssemblyBuilder を使った動的クラス生成

C#

先日、Expression と DynamicMethod でそれぞれ動的にデリゲートを生成するサンプルを書いてみた。 tnakamura.hatenablog.com メタプログラミングの目的がリフレクションの高速化なら、 動的なデリゲート生成で事足りる場合が多い。 今回は一歩進んで、動的…

PostgreSQL で Entity Framework Core を使っていて money 型でハマった

PostgreSQL で Entity Framework Core を使っていて、PostgreSQL の money 型の列を C# の decimal 型のプロパティにマップしたら、プロパティに格納される値がなんか変でハマった。テーブルに格納されている値の 100 分の 1 になってる。 試したのは下記の…

メタプログラミング事始め

C#

はじめに 『メタプログラミング.NET』を読んで、 C# で黒魔術もといメタプログラミングを習得したくなってしまったので、 まずは簡単なお題で練習してみた。 メタプログラミング.NET (アスキー書籍)作者: KevinHazzard,JasonBock出版社…