つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

Visual Studio Tools for Azure Functionsでデバッグできない現象を解決する方法

仕事や趣味でAzure Functionsのアプリケーションを作ることがちょくちょくあります。
サーバを作るほどでも無いちょっとしたアプリケーションをホストするにはとても使い勝手がよいです。

Visual Studio 2015を使えば、Azure Functionsのローカル開発を行うことができます。詳しくはこちらをご覧ください。

Azure Functions のローカル開発 | ブチザッキ

通常、デバッグを実行するとlocalhostのWebサーバが起動し、Functionsの関数へのエンドポイントが実行されます。
しかし、いつからかデバッグできない状態に陥っていました。(Visual Studio 2017をインストールしてからかも?)

具体的にはlocalhostのWebサーバは起動するが、関数のエンドポイントが繋がらず 503 Service Unavailable となってしまいます。

f:id:tech-tsubaki:20170701205119j:plain

Warning: The filename 'appsettings.json' is deprecated. Rename it to local.settings.json

                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %

Listening on http://localhost:7071/
Hit CTRL-C to exit...
[2017/07/01 11:30:42] Reading host configuration file 'D:\Functions\host.json'
[2017/07/01 11:30:42] Host configuration file read:
[2017/07/01 11:30:42] {
[2017/07/01 11:30:42]
[2017/07/01 11:30:42] }
[2017/07/01 11:30:42] Loaded custom extension: BotFrameworkConfiguration from ''
[2017/07/01 11:30:42] Loaded custom extension: SendGridConfiguration from ''
[2017/07/01 11:30:46] Generating 1 job function(s)
[2017/07/01 11:30:46] Starting Host (HostId=matvaio-1730734029, Version=1.0.11002.0, ProcessId=9884, Debug=False, Attempt=0)
[2017/07/01 11:30:46] Found the following functions:
[2017/07/01 11:30:46] Host.Functions.Hoge
[2017/07/01 11:30:46]
[2017/07/01 11:30:46] Job host started
The host is taking longer than expected to start.
The host is taking longer than expected to start.
The host is taking longer than expected to start.

The host is taking longer than expected to start.という出力が延々続いて、何もできない状態となります。
Visual Studio 2015の修復や、Visual Studio Tools for Azure Functionsの修復を何度か試しましたが、改善されず放置していました。
まぁVisual Studio 2017に開発ツールが出てくるのを待てばいいや、というスタンスでした。

しかしやはり不便だったので解決方法を調べてみると、Azure Functions CLIリポジトリにIssueがあがっていました。

github.com

このIssueで述べられていた内容としては、デバッグ時に使用するポート(既定では7071)が既にシステムに登録されているよ、という内容でした。
コマンドプロンプトを管理者権限で起動し、次のコマンドを入力しましょう。

netsh http delete urlacl url=http://+:7071/

私もこのコマンドを使用することでデバッグできない問題が解消されました。
これでエンドポイントにアクセスすることができ、デバッグ実行を行うことができるようになりました。

f:id:tech-tsubaki:20170701205401j:plain

Azureの開発ツールもGitHubで管理・公開されるようになり、不具合に関する情報が見えやすくなってきていますね。
もし同じ現象で困っている方の参考になればいいなーと思います。

de:code2017に参加してきました

今年もde:codeに参加してきました。

de:code (decode) 2017 | 日本マイクロソフトの開発者/アーキテクト/IT Pro 向けイベント - Microsoft Events & Seminars

今年のde:codeはCognitive Servicesのような「AI」、HoloLensのような「MR (Mixed Reality)」をテーマとしたセッションが多かった印象です。
逆に言語系のセッション数が減っていましたね。Xamarinのセッションは多かったけども。

ということで備忘録として私が聴講したセッションをメモしときます。

day 0 (5/22)

今年は前夜祭として、Developers Summitとコラボしたイベントが前日に開催されました。
de:codeの事前受付もできるということで参加しました。

Developers Summit code your future ~エッジな技術領域とエンジニアのキャリアデザインについて語ろう~

day 1 (5/23)

  • [Keynote] The New Age of Intelligence
  • [TL02] “Shift Left” で問題の早期発見を実現する、最新 Visual Studio の品質チェック・テスト機能の使い方
  • [DO03] 50 分でわかるテスト駆動開発

ラスト2枠はブース出展の担当だったため不参加。

f:id:tech-tsubaki:20170527222430j:plain

参加者パーティ

抽選でBluetoothキーボードが当たりました。抽選番号は幸運にもマリアノ・リベラ「42」

de:codeのパーリィで当選したキーボードの開封の儀

day 2 (5/24)

  • [CT04] AI サービスの作り方、育て方
  • [MW05] その API、本当に大丈夫? ~ 公開前に知っておくべき API の保護と最適化 ~
  • [AC07] 米国マイクロソフト本社で体験したノウハウを伝授!マイクロサービス実行基盤Azure Service Fabricの勘所
  • [DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
  • [AI09] いまさら聞けない、エンジニアのための機械学習のキホン
  • [TL13] Build 2017 Updates ~ Build/de:code 総括! テクノロジーとアプリ開発の最新動向

旅の〆

.NET Coreのプロジェクトをproject.jsonから.csprojに変換してみた

.NET Coreのバージョンについては難しくて有名です。いまだに私もよく分かっていません。

blog.shibayan.jp

yfakariya.blogspot.jp

そんな.NET Coreですが、1.0がリリースされて以降、プロジェクトを構成するファイルが project.json から .csproj に変更されました。
.NET Frameworkなプロジェクトでは .csproj ですので、もとに戻ったという感じですね。

project.jsonから.csprojに移行するのはさほど難しくないという記事をちらっと見た気がしたので実際に移行してみました。
各作業はGitHubにコミットとして残してありますので、併せて見て頂けるとイメージしやすくなるかもしれません。

project.json形式でプロジェクトを作成する

Visual Studio 2015にて project.json形式のプロジェクトを作成します。
今回はASP.NET Core 1.0 MVCのWebアプリケーションで試しました。

github.com

この段階ではプロジェクトの構成情報は.xprojファイル、NuGetパッケージに関する情報等はproject.jsonにて管理されています。

project.jsonから.csprojへの移行方法を確認する

公式ドキュメントを読みましょう。

docs.microsoft.com

ドキュメントによればVisual Studio 2017か、dotnet migrateコマンドを使いましょうとあります。
ということで手っ取り早くVisual Studio 2017を使って移行をやってみます。

Visual Studio 2017でプロジェクトを開く

Visual Studio 2015で作成したプロジェクトをVisual Studio 2017で開くと、下のような「プロジェクトをアップグレードするよ」という旨のダイアログが最初に表示されます。

f:id:tech-tsubaki:20170506205604j:plain

ちなみにこちらが全文となります。

一方向のアップグレード
Visual Studio は、次のプロジェクトを開くために機能的な変更を自動的に行います。プロジェクトの作成に使用したバージョンの Visual Studio では、プロジェクトを開くことができなくなります。
     - Project2Csproj, "D:\src\yuta\project2csproj\src\Project2Csproj\Project2Csproj.xproj"


非機能的な変更が必要です
Visual Studio は、次のプロジェクトに Visual Studio 2015、Visual Studio 2013、Visual Studio 2012、および Visual Studio 2010 SP1 で開くための非機能的な変更を自動的に加えます。プロジェクトの動作への影響はありません。
     - Project2Csproj, "D:\src\yuta\project2csproj\Project2Csproj.sln"


変更は必要ありません
これらのプロジェクトは、変更せずに Visual Studio 2015、Visual Studio 2013、Visual Studio 2012、および Visual Studio 2010 SP1 で開くことができます。
     - src, "src"
     - Solution Items, "Solution Items"

このダイアログで「OK」を押せば、プロジェクトの変換が行われ、project.jsonから.csprojに変わります。
移行が終わった時点のコミットはこちらです。

github.com

.xproj, global.json, project.jsonがなくなり、.csprojに集約された感じですね。
あとVisual Studioのバージョンがあがったことで .NET Coreのランタイムも1.0.1から1.0.4にアップグレードされてますね。

疑問

ところでcsprojに移行したことで、global.jsonで指定されていた .NET Core SDKのバージョンの記載がどこにも見当たりません。
csprojに<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>という指定があるため、このランタイムバージョンが利用できるSDKが勝手に指定されるイメージなのでしょうか?
ファイルを読み取る以上、このあたりがどう指定されていくのかがよく分からずじまい・・・。

f:id:tech-tsubaki:20170506211339j:plain

ちなみにランタイム1.0.4で利用できるSDKのバージョンは1.0.11.0.3となります。

github.com