Windows Azure SDK for .NET 1.8 の主な更新内容&WebSocket Protocolを有効化するには?
最近のマイクロソフトは様々な製品のリリースラッシュであり、それら(特に.NET Framework 4.5 等)への Windows Azure SDK の対応が待ち望まれていたが、ついに最新版である Windows Azure SDK 1.8 がリリースされた。同SDKは以下のサイトからダウンロードが可能だ。
- Web Platform Installer http://www.windowsazure.com/en-us/develop/downloads/
- 個別インストール http://www.microsoft.com/ja-jp/download/details.aspx?id=35448
主な変更点
主な変更点は以下だが、他にも数点の更新がある。詳細は別途 http://msdn.microsoft.com/en-us/library/windowsazure/ff683673.aspx#BK_October2012 を参照してほしい。
- .NET Framework 4.5, Windows Server 2012 が対象に加わった
- サーバエクスプローラで、ストレージアカウントのリソース(ブロブの編集、アップロード。キューの作成等)を編集可能に
SDK のインストール
Web Platform Installer を立ち上げると、以下のように Windows Azure SDK for .NET 1.8 が表示されるので、利用している Visual Studio に対応した SDK を選択してインストールを実施する。
インストールが完了すると以下の画面が表示されるので、[完了]ボタンを押下すれば終了だ(Web Platform Installer は楽で良いですな)。
.NET Framework 4.5 の利用
Visual Studio を立ち上げて新規にクラウドサービスを作成する際、.NET Framework 4.5 を利用可能なことを確認できる。
また、ServiceConfiguration.Cloud.cscfg ファイルを参照すると osFamily="3" になっている。osFamily="1" が Windows Server 2008 SP1, osFamily="2" が Windows Server 2008 R2 だったので、osFamily="3" が Windows Server 2012 相当とみて間違いないだろう(まだMSDNに記載が存在しない)。
リモートデスクトップでインスタンスの情報を確認
管理ポータルから .NET Framework 4.5&Windows Server 2012 のインスタンスにリモートデスクトップをしようとしたが、管理ポータルにて以下の画面が表示された。デプロイしたクラウドサービス自体は動作しているので、管理ポータルの問題かと思われる(詳細は不明)。また、twitter の TL 上では問題なく管理ポータル上からリモートデスクトップできる方もいるので、本問題が発生しない場合はそのまま管理ポータル上からリモートデスクトップ接続を実施してほしい。
上記の問題が発生した場合は、Visual Studio のサーバエクスプローラから当該インスタンスへのリモートデスクトップ接続が可能だ。以下の画像を参考にして対応してほしい。
当該インスタンスにリモートデスクトップで接続後、IIS Manager を起動すると以下の画面が確認可能だ。Windows Server 2012 と IIS8 がクラウドサービスで稼働していることが確認できる。
しかし、「Add Roles and Features Wizard」では、ASP.NET 4.5のインストールは確認できるものの、WebSocket Protocol がインストールされていないことがわかる。
WebSocket Protocol を有効化するには?
このままではクラウドサービスにて WebSocket Protocol が利用できないため、PowerShell を利用して同機能を有効化する。PowerShell を利用した、Windows Server で機能を有効化する手順はMSDN Library > Install or Uninstall Roles, Role Services, or Featuresに記載されているが、こちらとクラウドサービスの機能であるスタートアップタスクを併用して問題を解決する。
フォルダ構成とファイルの中身はそれぞれ以下となる。
- setup.cmd(※Shift-Jisで保存しないとエラーが発生する点に注意)
powershell.exe Install-WindowsFeature -Name Web-WebSockets
- ServiceDefinition.csdef
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8"> <WebRole name="MvcWebRole1" vmsize="ExtraSmall"> <Startup> <Task commandLine="setup.cmd" taskType="simple" executionContext="elevated"/> </Startup> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Imports> <Import moduleName="Diagnostics" /> <Import moduleName="RemoteAccess" /> <Import moduleName="RemoteForwarder" /> </Imports> </WebRole> </ServiceDefinition>
同対応の実施後、改めてクラウドサービスのインスタンスにリモートデスクトップで接続し、状態を確認したところ無事 WebSocket Protocol が有効化していることが確認できた。
参考リンク
すでに以下の方々が情報を記載しているので、こちらを参考にしてもよいだろう。