IQ49

IT業界の感想

なぜ俺のASP.Net CoreアプリはIISで動かないのか

Q なぜ俺のASP.Net CoreアプリはIISで動かないのか
A モジュールが足りないから

じゃけんモジュール入れましょうね。
どのモジュールを入れたらいいかは公式に書いてある。

docs.microsoft.com

以下のサイトからWindows Hosting Bundle Installerをダウンロードしてサーバにインストールすればすぐ終わる。簡単。インストールしたらIIS自身を再起動してモジュール機能のページにAsp.Net Coreが増えてればOK。

dotnet.microsoft.com

ではなぜ動かなくなるかというとWindows Hosting Bundle Installerを使わずに各ランタイムを個別に入れようとしてミスるから。

ホスティング システムに .NET Core ホスティング バンドルをインストールします。 このバンドルをインストールすることで、.NET Core ランタイム、.NET Core ライブラリ、ASP.NET Core モジュールがインストールされます。 このモジュールでは、ASP.NET Core アプリが IIS の背後で実行できるようになります。

検索方法によっては以下のサイトのようなランタイムを個別にインストールするサイトが出てきてモジュールのインストール忘れが発生する。

dotnet.microsoft.com

ODP.Net CoreでTNS_ADMINを指定する

環境
.Net Core 3.1
Oracle.ManagedDataAccess.Core 2.19.70

.Net Frameworkではapp.configでTNS_ADMINを設定することで接続文字列のDataSourceにtnsnames.oraで設定したデータソース名を用いることができた。.Net Core版ではこれができなくなっている。
代替手段として用意されているのは.NET構成APIを用いる方法だ。OracleConnectionを生成する前にOracleConfiguration.TnsAdminにtnsnames.oraが配置されているフォルダを指定すればよい。
TnsAdminに設定する値は自力でappSettings.jsonから引っ張ってきてどうぞ。

OracleConfiguration.TnsAdmin = "C:\app\NetWork\Admin"; // tnsnames.oraが配置されているフォルダ

orclCon = new OracleConnection("user id=hr; password=<password>; data source=orclpdb");
orclCon.Open();

詳細は公式サイトに書かれている。

docs.oracle.com

またtnsnames.oraは以下の優先順位で検索されるらしい。
1. OracleConfiguration.TnsAdminプロパティで設定されたディレクト
2. 実行中ODP.NET Coreアセンブリディレクト
3. 現行作業ディレクト

.Net Coreのlog4netでロガー名を指定してロガーを生成するには

環境
.Net Core 3.1
log4net 2.0.8

.Net Core対応でlog4netをnugetから入れたときに気がつくのはロガー名だけを指定してロガーを生成するメソッドが無いということだ。.Net Framework版だとロガー名指定でロガーを生成できてたのでどうやっていいかを調べた。
.Net Core版では以下のように書くことでロガー名でロガーを生成できる。ここではMyLoggerというロガー名を指定している。
現場からは以上です。

ILog logger = LogManager .GetLogger(Assembly.GetExecutingAssembly(), "MyLogger");

stackoverflow.com

.NET Core 汎用ホストの環境変数の接頭辞はなにか

.Net Core汎用ホストの環境変数の接頭辞は「DOTNET_」である。環境によって処理を切り替えたいときの環境変数は「DOTNET_ENVIRONMENT」となる。
以上!

github.com

ところで「generic host environment prefix」とかで調べても情報全然出てこないんだが使うの難しすぎでは。

Asp.Net CoreでIISに30MB以上のファイルをアップロードする

30MBと言ったが正確には30000000バイトだ。

環境

.Net Core 3.1

手順

まずweb.configにrequestLimitsを追加する。maxAllowedContentLengthに指定した数が最大アップロード容量だ。
Asp.Net Coreのテンプレートにはweb.configが初期は存在しないから無いなら自分で作ってどうぞ。locationタグが漏れないよう注意。
Web.configじゃなくてIISの最大アップロードサイズ変更でいいかもしれんが試してないので知らん。

web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <requestFiltering>
          <!-- Handle requests up to 1 GB -->
          <requestLimits maxAllowedContentLength="1073741824" />
        </requestFiltering>
      </security>
    </system.webServer>
  </location>
</configuration>

次にStartup.csでコンフィグ設定している箇所にIISServerOptionsとFormOptionsの処理を追加する。

・Startup.csから抜粋

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            
            services.Configure<IISServerOptions>(options =>
            {
                options.MaxRequestBodySize = 1073741824; // 1GB
            });

            services.Configure<FormOptions>(x =>
            {
                x.ValueLengthLimit = 1073741824; // 1GB
                x.MultipartBodyLengthLimit = 1073741824; // 1GB
            });
        }

これでファイルアップロードの上限が増えてるはず。

終わりに

・参考サイト github.com

Asp.Net Coreのファイルアップロード方法は以下のサイト見ればだいたい分かる。 docs.microsoft.com

・ファイルアップロードの公式サンプル github.com

1995年からの名目GDP成長率が低い日本はオワコンなのか

Twitterを見てると「1995年の名目GDPを100としたときに日本以外の国は伸びてるのに日本だけ減ってる!」という意見があった。その意見のせいで日本人は昔に比べて成長していないんだという悲観的な印象を受けた人が一定数いたようである。日本愛好家として「日本オワコン!」という意見は見過ごせないので成長率以外の数字を見ていく。

統計

f:id:baito_mo_yamunai:20191124152600p:plain

https://www.google.com/publicdata

グーグルのパブリックデータ、世界開発指標から一人あたりの名目GDPを引っ張って来たのが上の図である。1995年の日本のGDPは他の国と比較して突出して高いことがわかる。「昔の日本はすごかったんだ!」と思う前にちょっと待ってほしい。まず前提条件として名目GDPというのはドルベースで算出される。そのため円高ドル安であると名目GDPは実質の経済規模より増えたように見える。そして1995年といえば1ドル79円の超円高時代、それが反映されているためグラフでは1995年の日本が突出しているのである。

このことを踏まえると「1995年の名目GDPと100としたとき~」という意見は、日本が衰退しているという主張を劇的に見せたいだけの恣意的な意見であると言わざるを得ない。名目GDPを用いて日本を主体とするデータ比較を行うなら1995年を基準とするべきでないし、1995年からの変化が知りたいだけであれば実質GDPの値を使うべきだろう。

f:id:baito_mo_yamunai:20191124155055p:plain

同様に一人あたりの実質GDP(2000年基準)を引っ張ってきたのが上の図である。ご覧の通り1995年の値に比べて現在の値は至って普通に上昇している。「1995年から減ってる!」という認識は何だったのだろうか。参考までに述べると日本の1995年の値は40,368ドル、2017年の値は48556となっている。

また、他国と比較して成長率が低いということもグラフからは読み取れない。本当に成長率がオワコンになっていればとうの昔にフランスやイタリアに抜かれていないとおかしいはずである。

そもそも成長率○○位だからオワコンというのもおかしな話だ。アメリカは日本より成長率が高いがそれでも2017年度の実質GDP成長率は191カ国中127位だ(日本は138位)。成長率が低いから終わりなのであれば100位以内に入れないアメリカも終わりということになってしまう。

まとめ

  • 1995年は超円高なので名目GDPの値が現在の値と比べても高く見える。現在のGDPと比較したいのであれば実質GDPの値を用いるべきである。

【2019年4月29日】Windows 10 Home EditionでRDP Wrapperを使ってリモートデスクトップ接続する方法

今日もWindows10をUpdateしたらリモートデスクトップで接続できなくなったのでメモ。

  • 前提条件

RDPWrap-v1.6.2 がインストールされていること。

  • 更新

https://github.com/stascorp/rdpwrap/issues/763

掲示板を見て、「動いたよ」と言っている人を見つける。

https://github.com/stascorp/rdpwrap/files/3126174/rdpwrap_working_version.zip

親切な人が動いたときの設定ファイルをアップロードしてくれているので上記からzipをダウンロード。

解凍して出てきた rdpwrap.ini ファイルを C:\Program Files\RDP Wrapper フォルダの同名ファイルに上書き。

自分は何故か上書きできないと言われたので、Windows 管理ツール → サービス を起動し「Remote Desktop Services」を停止させた後、ファイルを上書き。

f:id:baito_mo_yamunai:20190429203435p:plain
サービス2

再起動したら動いた。