.NET

ASP.NET Core アプリを Windows サービスでホストする場合はカレントディレクトリの変更を忘れてはいけない

大人の事情で、ASP.NET Core アプリを Microsoft.AspNetCore.Hosting.WindowsServices を使って Windows サービスでホストしていたんだけど、カレントディレクトリの変更は不要と思ってコードを省略したら、ヒドイ目にあった。 public class Program { publi…

ASP.NET Core で gRPC と MVC の両方に対応できるか試した

はじめに ASP.NET Core で gRPC と gRPC-Web を 1 つのアプリでホストできることは確認した。 tnakamura.hatenablog.com gRPC と MVC はどうだろうか?試してみた。 gRPC サーバーに Web API を追加 GreeterController using Microsoft.AspNetCore.Mvc; name…

ASP.NET Core で gRPC と gRPC-Web の両方に対応できるか試した

はじめに Grpc.AspNetCore.Web を使えば、プロキシを別に立てる必要なく、ASP.NET Core のパイプラインに gRPC-Web を組み込める。 gRPC-Web を組み込んだ場合に、gRPC-Web だけではなく通常の gRPC も使えるのか、気になったので試してみた。 gRPC サーバー…

Trace に出力した内容を Application Insights に保存する

はじめに セルフホストしてる WCF サービスで、例外が発生したら Application Insights に記録したい。ただ、WCF 用のパッケージはラボの段階で、しかもリポジトリはアーカイブされている。開発されていない。 github.com 今から TelemetryClient を使って A…

WCF の BasicHttpBinding を使ったセルフホストで HTTPS を構成してみた

はじめに WCF で HTTPS を構成できるか試すことになった。 しかも IIS を使わず、セルフホストで。 サービスコントラクトの定義 using System.ServiceModel; namespace WcfHttpsSample.Shared { [ServiceContract] public interface ISampleService { [Opera…

HatenaBookmarkSharp - はてなブックマーク REST API C# クライアント

はじめに HatenaBookmarkSharp っていう、はてなブックマーク REST API の C# クライアントを書いた。 developer.hatena.ne.jp www.nuget.org github.com モチベーション 自分が現在作っているアプリではてなブックマーク REST API を呼び出したい場面があり…

Azure SQL Database に接続する WCF サービスの Windows コンテナを Azure Kubernetes Service で動かす

はじめに Azure SQL Database に接続する WCF サービスを、Windows コンテナのプロセス分離モードで動かすところまで漕ぎつけた。 tnakamura.hatenablog.com 一連の実験もいよいよ今回で最後。Azure SQL Database に接続する WCF サービスを、Azure Kubernet…

Azure SQL Database に接続する WCF サービスを Windows コンテナのプロセス分離モードで動かす実験

はじめに 最近、自分の中で Docker 熱、というか Windows コンテナ熱が再燃。Windows コンテナのプロセス分離モードで WCF サービスをホストするのと、Windows コンテナの中から Azure SQL Database に繋ぐところまでは、以前実験した。 tnakamura.hatenablo…

ASP.NET Core Identity で主キーに値オブジェクトを使う方法

はじめに ドメイン駆動設計のパターンの一つである値オブジェクトを実践するようになってから、ASP.NET Core Identity でユーザーの ID の型 が string なことに恐怖を感じるようになった。ユーザー ID を表す値オブジェクトじゃないと安心してコード書けな…

Swashbuckle.AspNetCore.Cli と OpenAPI Generator を使って Web API のクライアントを生成する

はじめに Swashbuckle.AspNetCore を使うことで、ASP.NET Core MVC で実装した Web API に Swagger UI を組み込める。 docs.microsoft.com Web API の動作確認をする程度ならこれで十分だけど、せっかく Swagger/OpenAPI を使うなら、クライアントのソースコ…

https にリダイレクトすると Authorization ヘッダーが失われる

はじめに HttpClient を使って http で Authorization ヘッダー付きのリクエストを送信し、https にリダイレクトされると、https のリクエストには Authorization ヘッダーが付かない。 以下、実験コード。 Web API HTTP リクエストのヘッダーをログに出力し…

認証スキームの異なる複数の JWT Bearer 認証を構成してみた

はじめに ASP.NET Core で JWT Bearer 認証を使うときに Startup.ConfigureServices で呼び出す AddJwtBearer は、 任意の authenticationScheme を指定できる。 となると、authenticationScheme さえ重複しなければ複数回呼び出しても問題ない、はず。 気に…

ProxyKit を使ってリバースプロキシを実装する

はじめに ASP.NET Core で実装した Web API の前段にリバースプロキシを置く必要がありそう。 しかも、そのリバースプロキシはデータベースにある情報を使ってリクエストの振り分けを行わなければならないため、 プログラマブルなリバースプロキシが求められ…

.NET Framework 4.8 で動いている Web API を .NET Core 3.1 で動いている IdentityServer4 で保護する

はじめに 大人の事情によって .NET Framework 4.8 で動かさざるをえない ASP.NET Core 2.2 製 Web API を、OAuth2.0 か OpenID Connect に対応させる必要があり、IdentityServer4 を使う予定でいた。 その IdentityServer4 は 5/1 時点で v3.1.3 が最新。も…

コードファースト ASP.NET Core gRPC でのインターセプター利用

はじめに protobuf-net.Grpc を使ってコードファーストに ASP.NET Core gRPC サービスを実装する場合でも、 ASP.NET Core の JWT Bearer 認証ミドルウェアを使うことができそうだ、 というところまで前回確認できた。 tnakamura.hatenablog.com Authorizatio…

コードファースト ASP.NET Core gRPC での JWT Bearer 認証の利用

はじめに ASP.NET Core gRPC は ASP.NET Core のミドルウェアをサポートしているけど、 protobuf-net.Grpc を使ってコードファーストで実装する場合でも、 JWT Bearer 認証が使えるか試してみた。 Shared プロジェクトを作成 毎度おなじみの、 クライアント…

コードファースト ASP.NET Core gRPC でのヘッダーの利用

はじめに WCF では OperationContext の IncomingMessageHeaders と OutgoingMessageHeaders を使って、 カスタムヘッダーをクライアントから送ったり、サーバーから返したりできた。 tnakamura.hatenablog.com gRPC には Metadata という同じような機能があ…

コードファースト ASP.NET Core gRPC ストリーミング編

はじめに 先日、WCF から gRPC に移行するときの手段として、.proto ファイルを書くのではなく、protobuf-net.Grpc を使って C# のコードから gRPC のクライアントとサーバーを動的に生成する方法を紹介した。コードファースト ASP.NET Core gRPC と命名。 t…

コードファースト ASP.NET Core gRPC

この記事は、C# その2 Advent Calendar 2019 の二日目の記事です qiita.com はじめに コードファーストで開発したい protobuf-net.Grpc コードファースト ASP.NET Core gRPC をやってみる .NET Core ライブラリ作成 NuGet パッケージ追加 データコントラクト…

WPF の ListView で ToolTip を表示する方法メモ

久しぶりの WPF。 ListView の各行にツールチップを表示する方法を調べたのでメモを残しておく。 <ListView> <ListView.ItemContainerStyle> <Style TargetType="{x:Type ListViewItem}"> <Setter Property="ToolTip" Value="{Binding Path=MyToolTipText}"/> </Style> </ListView.ItemContainerStyle> <ListView.View> <GridView> </gridview></listview.view></listview>

Windows コンテナのプロセス分離モードでコンテナ外の SQL Server に接続する実験

はじめに 先日、Windows コンテナのプロセス分離モードで WCF サービスを動かすことに成功した。 tnakamura.hatenablog.com お次はコンテナ外の SQL Server に接続できるか実験してみる。 これに成功したら、いよいよ本格的なアプリケーションを動かす実験に…

WCF サービスを Windows コンテナのプロセス分離モードで動かす実験

はじめに 先日、ASP.NET Core アプリを Windows コンテナのプロセス分離モードで動かす実験を行った。 tnakamura.hatenablog.com 本業で抱える .NET Framework の資産は、ASP.NET Core よりも WCF の方が大多数なので、 次は WCF サービスをコンテナ化する実…

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 でホストし…

.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 MVC アプリケーションの Docker コンテナを Heroku で動かしてみた

以前、最小の ASP.NET Core アプリケーションの Docker コンテナを Heroku で動かせた。 ただ、ASP.NET Core MVC アプリケーションでは、Heroku 上で NuGet パッケージの復元を実行しようとしていて失敗。 NuGet パッケージの復元で失敗するのなら、復元の必…