c#

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 を使う

c#

認証に 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出版社…

ASP.NET Core はインテグレーションテストが書きやすい

c#

ASP.NET Core はインテグレーションテストをちゃんとサポートしているので、Web API のテストが書きやすい。 www.nuget.org このパッケージを使えば、xUnit を使ったテストプロジェクトで Web API を簡単にホストしてテストできる。自分の場合、インテグレー…

Xamarin.iOS で EntityFrameworkCore のマイグレーションを使う

はじめに 先日、Xamarin.iOS で EntityFrameworkCore が使えることがわかった。 tnakamura.hatenablog.com そうなると、データベースのマイグレーションがやりたくなるのは自然な流れ。 今度はマイグレーションを試してみた。 マイグレーションファイルを生…

Xamarin.iOS で EntityFrameworkCore を使う

Xamarin.iOS で EntityFrameworkCore を使うことができたのでメモしておく。 データベースは SQLite。 なのでパッケージは Microsoft.EntityFrameworkCore.Sqlite をインストールすることになる。 www.nuget.org Visual Studio で NuGet パッケージをインス…

Azure SQL Database の一時テーブルに SqlBulkCopy が使えるようになっていた

Azure SQL Database は着実に改善しているようで、以前はできなかった「SqlBulkCopy を使った一時テーブルへの書き込み」ができるようになっていた。 検証に使ったソースコードを貼っておく。 using System; using System.Configuration; using System.Data.…

Entity Framework Plus を使ってタイプセーフに一括更新を行う

c#

Entity Framework Core を使っていて、 エンティティをまとめて更新したい場面は結構あるが、 タイプセーフかつ効率的に更新する手段は、 今のところ標準で提供されていない。 ExecuteSqlCommand を使って直接 SQL を発行すればいいんだけど、 テストではInM…

EntityFrameworkCore で SQL Server の IDENTITY プロパティを使うときの注意点

EntityFrameworkCoreのバージョンは v2.0.1。 例えば次のようなテーブルがあるとする。 create table Entry ( Id bigint identity(1,1) not null, Title nvarchar(100) not null, Body nvarchar(max) null, constraint pk_Entry primary key clustered ( Id …

Azure Functions を使った Azure Storage の増分バックアップ

先日作成した Azure Storage のコンテナをバックアップするプログラムは、高速化しても完了までに 5 時間弱かかる。 tnakamura.hatenablog.com こいつを毎日実行するのは気が引ける。コンテナの完全バックアップは週一回にしておき、増分バックアップを毎日…

WCF on .NET Core

c#

.NET Core でも WCF を使うことはできる。提供されているのはクライアントライブラリだけなので、.NET Core で動く WCF サービスを作ることはできないけど。 試しに TCP でやってみた。WCF サービスは .NET Framework で作るしかない。 using System; using …

Azure Storage に保存したブロブのバックアップを高速化

先日、「Azure Storageに保存したブロブをバックアップ専用ストレージアカウントにコピーする」プログラムを書いたが、素直に実装したため激しく遅かった。並列化すらしていないから当然か。 tnakamura.hatenablog.com そこで、『Azure Storage Data Movemen…

Azure Storage に保存したブロブのバックアップ

仮想マシンのイメージなんかを Azure Storage にバックアップする記事は探せばすぐ見つかるけど、 Azure Storage に保存しているブロブを別のどこかにバックアップする記事は見つけることができなかったので、 Microsoft.WindowsAzure.Storage を使ってバッ…

Azure Storage を使っていて同時接続数でハマった

Azure Storage に添付ファイルをアップロードする処理を持つ ASP.NET Core MVC(.NET Core) アプリを、 Azure App Service にデプロイしてベンチマークをとってみたら、 スケールアウトやスケールアップしても思ったようにパフォーマンスが上がらなくて、 ボ…

.NET Core 時代のコマンドライン引数解析

c#

.NET でコンソールアプリケーションを開発するときの悩みの種が、コマンドライン引数の解析。 .NET Framework がコマンドラインパーサーを提供してくれないので、 仕方なくオレオレパーサーを書いたり、Mono にあるライブラリを使ったりしてきたけど、 .NET …

JwtBearerAuthentication を使っている Web API を Swashbuckle.AspNetCore で試す

c#

Swashbuckle.AspNetCore を使うことで、 ASP.NET Core で作成した Web API を Swagger UI 上で試せるようになった。 ただ、大抵の Web API では OAuth2 なり JWT Bearer なりの認証が必要、という風に実装していると思う。 自分の場合は JWT Bearer。 Swagge…

ASP.NET Core 2.0 で JWT を使った認証を実装する

c#

先日、ASP.NET Core MVC で JWT を使った認証を実装する記事を書いた。 tnakamura.hatenablog.com しかし、ASP.NET Core 2.0 では認証まわりがガラッと変わってしまったので、 上の記事にある方法は使えなくなってしまった。 /(^o^)\ナンテコッタイ。 なので、ASP…

ASP.NET Core 2.0 でも Swashbuckle.AspNetCore は使えた

c#

Swashbuckle.AspNetCore は ASP.NET Core 2.0 に対応していないから使えないと思っていたが、 勘違いだった。 github.com Swashbuckle.AspNetCore のイシューを読んで発覚。 github.com 実際に試してみたところ、ASP.NET Core 2.0 プロジェクトに Swashbuckl…

Microsoft.AspNetCore.Mvc.ApiExplorer を使って Web API ドキュメントを自作

c#

開発している Web API を ASP.NET Core 2.0 に移行しようと思っていたが、Web API のドキュメント生成に使っている Swashbuckle.AspNetCore がまだ 2.0 に対していないっぽくて一時中断。 ASP.NET Core MVC にはもとから Microsoft.AspNetCore.Mvc.ApiExplor…

.NET Core で Shift-JIS を扱う

c#

例えば .NET Core でテキストファイルを出力するとき、文字コードに Shift-JIS を指定するには System.Text.Encoding.CodePages が必要だった。 www.nuget.org using System; using System.IO; using System.Text; namespace EncodingSample { class Program…

ASP.NET Core MVC で JWT を使った認証を実装する

c#

以前、ASP.NET Core MVC で Basic 認証を行う記事を書いた。 tnakamura.hatenablog.com プライベートな Web API なのでこれでいいかなと思っていたが、 大人の事情でそうはいかなくなり、 JWT(Json Web Token) を使った認証に変えることに。 Microsoft.AspNe…

ASP.NET Core MVC で Basic 認証

c#

先日 ASP.NET Core で Basic 認証を行うサンプルを書いた。 tnakamura.hatenablog.com ただ、これだと全てのパスで認証が必要になってしまう。 もともとやりたかったことは、 「ASP.NET Core MVC で Authorized 属性を付けたアクションだけを認証必須にする…

ASP.NET Core で Basic 認証

c#

ASP.NET Core で Basic 認証を行うサンプルを書いてみた。ユーザーは固定なので、本番で使うときは ASP.NET Core Identity みたいに、ユーザー情報をストアから取得するようにしたほうがいいだろうな。 using Microsoft.AspNetCore.Builder; using Microsoft…

指定した URL に付けられたすべてのブックマークを取得する

c#

はてなブックマークネタ第3弾。 最後は、指定した URL に付けられたすべてのブックマークを取得してみた。 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; using System.T…

指定した URL の人気ブックマーク一覧を取得する

c#

はてなブックマークネタ第2弾。 今度は、指定した URL に付けられたブックマークのうち、 人気のヤツを取得してみた。 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; usi…

指定したユーザーのはてなブックマーク一覧を取得する

c#

いいかげん、そろそろプログラミングネタを書かねば。 ってことで、C# で「指定したユーザーのはてなブックマーク一覧を取得する」サンプルを書いてみた。 はてなブックマークに専用の API が見当たらないので、RSS フィードを取得してパースしている。 オフ…