C#

.NET とか Node.js で KeyVault を触る

KeyValult の値をコードから触りたい場合。 .NET の場合 こうする。 var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(new AzureServiceTokenProvider().KeyVaultTokenCallback) App Service からは MSI で認証しにいく*1。ロー…

Table Storage でバッチ処理

Azure の Table Storage を .NET から扱う場合は Microsoft.WindowsAzure.Storage 1 が利用できる。その中でバッチ処理についてメモ。 単一のテーブルにバッチ処理を行いたい場合は TableBatchOperation クラスを使う。 var entities = GetEntities(); var o…

同時実行するときのコレクション

C#

以下を実行すると、ArgumentException になったり result が歯抜けになったりする。 var result = new Dictionary<int, int>(); Parallel.For(0, 10000, i => { result.Add(i, CalculateSomething(i);); }); これは Dictionary がスレッドセーフでないため。 Concurren</int,>…

[ASP.NET MVC] Controller から Json を Camel Case でシリアライズして返す

C#

public class User { public string Id { get; set; } public string Name { get; set; } } public class DefaultController : Controller { [HttpGet] public ActionResult GetPerson() { IEnumerable<User> users; // DB からとってきたりする return Json(users</user>…

画像の解像度を変換する

C#

【注意】画像エンコードのことは全然詳しくないので、本質的に正しいやり方なのか不明。 System.Drawing.Image で読み込んで .SetResolution してもいいのだが、 var image = Image.FromFile(path); image.SetResolution(dpiX, dpiY); System.Drawing は ASP…

TransactionScope のネスト

C#

System.Transactions.TransactionScope は Complete を呼ばない限り Dispose されたときにロールバックしてくれる。 テストとか例外処理とかで便利だ。 using (var ts = new TransactionScope()) { // DB に書き込み ts.Complete(); } ネストしてもつかえる…

HttpClient と using

C#

C# の REST クライアントといえば HttpClient 。コイツは IDisposable の実装なので、例えばこんな感じで using したくなる。 public class MyClient { public async Task<string> Get(string url) { using(var client = new HttpClient()) { var response = await c</string>…

MemoryCache でアプリケーション内キャッシュ

C#

System.Runtime.Caching.Cache を使うと、アプリケーション単位にデータをキャッシュさせることができる。 Web サーバー起動時にデータを読み込んで永続化させたい時などに便利だ。 string GetContent() { var cache = MemoryCache.Default; var content = c…