クイック スタート:ASP.NET と SignalR Service を使ってチャット ルームを作成する

Azure SignalR Service は SignalR for ASP.NET Core 2.1 に基づいており、ASP.NET SignalR との互換性は 100% ではありません。 Azure SignalR Service では、最新の ASP.NET コア テクノロジに基づいて、SignalR データ プロトコル ASP.NET 再実装されました。 ASP.NET SignalR に Azure SignalR Service を使用する場合、一部の ASP.NET SignalR 機能はサポートされなくなりました。たとえば、クライアントが再接続したときに Azure SignalR がメッセージを再生しない場合などです。 また、Forever Frame トランスポートと JSONP はサポートされていません。 ASP.NET SignalR アプリケーションを SignalR Service と共に使用するには、いくらかのコード変更や適切なバージョンの依存ライブラリが必要になります。

ASP.NET SignalR と ASP.NET Core SignalR の機能の比較の完全なリストについては、バージョンの違いに関するドキュメントを参照してください。

このクイック スタートでは、同様 の Chat Room アプリケーションの ASP.NET と Azure SignalR Service の使用を開始する方法について説明します。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

Azure へのサインイン

Azure アカウントで Azure Portal にサインインします。

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

このセクションでは、アプリに使う基本的な Azure SignalR インスタンスを作成します。 次の手順では、Azure portal を使って新しいインスタンスを作成しますが、Azure CLI を使うこともできます。 詳細については、Azure SignalR Service CLI リファレンスaz signalr create コマンドを参照してください。

  1. Azure portal にサインインします。
  2. ページの左上にある [+ リソースの作成] を選択します。
  3. [リソースの作成] ページで、[Search services and marketplace](サービスとマーケットプレースを検索) テキスト ボックスに「signalr」と入力し、リストから [SignalR Service] を選びます。
  4. [SignalR Service] ページで [作成] を選びます。
  5. [基本] タブで、新しい SignalR Service のインスタンスに必要な情報を入力します。 次の値を入力します。
フィールド 推奨値 説明
サブスクリプション サブスクリプションの選択 新しい SignalR Service インスタンスを作成するために使うサブスクリプションを選びます。
リソース グループ SignalRTestResources というリソース グループを作成する SignalR リソースのリソース グループを選択または作成します。 既存のリソース グループを使う代わりに、このチュートリアルのために新しいリソース グループを作成すると便利です。 チュートリアルの終了後にリソースを解放するには、リソース グループを削除します。

リソース グループを削除すると、そのグループに所属するすべてのリソースも削除されます。 この削除操作は元に戻すことができません。 保存するリソースが含まれていないことを確認してから、リソース グループを削除してください。

詳細については、 リソース グループを使用した Azure リソースの管理に関するページを参照してください。
リソース名 testsignalr SignalR リソースに使用する一意のリソース名を入力します。 testsignalr がお使いのリージョンに既に導入されている場合は、数字や文字を追加して名前が一意になるようにします。

名前は 1 ~ 63 文字の文字列で、数字、英字、ハイフン (-) 文字のみを使用する必要があります。 名前の先頭と末尾にはハイフン文字を使用できません。また、連続するハイフン文字は無効です。
[リージョン] 自分のリージョンを選択します 新しい SignalR Service インスタンスに適切なリージョンを選びます。

Azure SignalR Service は、現在すべてのリージョンで使用できるわけではありません。 詳細については、Azure SignalR Service リージョンの可用性に関するページを参照してください
価格レベル [変更] を選び、[Free (Dev/Test Only)](無料 (Dev/Test のみ)) を選びます。 [選択] を選び、価格レベルを確認します。 Azure SignalR Service には、Free、Standard、Premium という 3 つの価格レベルがあります。 チュートリアルでは、前提条件で特に明記されない限り、[Free] レベルを使います。

レベルと価格による機能の違いの詳細については、「Azure SignalR Service の価格」を参照してください
サービス モード 適切なサービス モードを選びます Web アプリで SignalR のハブ ロジックをホストしていて、SignalR Service をプロキシとして使う場合は、[既定] を使います。 Azure Functions などのサーバーレス テクノロジを使って SignalR のハブ ロジックをホストする場合は、[サーバーレス] を使います。

[クラシック] モードは下位互換性のためだけにあり、使わないことをお勧めします。

詳細については、「Azure SignalR Service のサービス モード」を参照してください。

SignalR チュートリアルでは、[ネットワーク][タグ] タブの設定を変更する必要はありません。

  1. [基本] タブの下部にある [確認と作成] ボタンを選びます。
  2. [確認と作成] タブで、値を確認し [作成] を選びます。 デプロイが完了するまでしばらくかかります。
  3. デプロイが完了したら、[リソースに移動] ボタンを選びます。
  4. SignalR リソース ページで、左側のメニューから、[設定] の下にある [キー] を選びます。
  5. 主キーの [接続文字列] をコピーします。 この接続文字列は、このチュートリアルで後ほどアプリを構成するために必要です。

ASP.NET SignalR アプリケーションでは、サーバーレス モードはサポートされていません。 Azure SignalR Service インスタンスの場合、必ず Default または Classic を使用してください。

「SignalR Service の作成」にあるスクリプトを使用して、このクイック スタートで使用されている Azure リソースを作成することもできます。

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

サンプル アプリケーションの複製

サービスのデプロイ中、コードでの作業に切り替えましょう。 GitHub からサンプル アプリを複製し、SignalR Service 接続文字列を設定し、アプリケーションをローカルで実行します。

  1. git ターミナル ウィンドウを開きます。 サンプル プロジェクトを複製するフォルダーに移動します。

  2. 次のコマンドを実行して、サンプル レポジトリを複製します。 このコマンドは、コンピューター上にサンプル アプリのコピーを作成します。

    git clone https://github.com/aspnet/AzureSignalR-samples.git
    

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

チャット ルーム Web アプリの構成と実行

  1. Visual Studio を起動し、複製したリポジトリの aspnet-samples/ChatRoom/ フォルダーにあるソリューションを開きます。

  2. Azure portal を開いたブラウザーで、作成したインスタンスを探して選択します。

  3. [Key](キー) を選択し、SignalR Service インスタンスの接続文字列を表示します。

  4. プライマリ接続文字列を選択してコピーします。

  5. web.config ファイルで接続文字列を設定します。

    <configuration>
    <connectionStrings>
        <add name="Azure:SignalR:ConnectionString" connectionString="<Replace By Your Connection String>"/>
    </connectionStrings>
    ...
    </configuration>
    
  6. Startup.cs で、MapSignalR() を呼び出す代わりに MapAzureSignalR({YourApplicationName}) を呼び出して接続文字列に渡し、アプリケーション自身が SignalR をホストするのではなく、サービスに接続するようにします。 {YourApplicationName} を自分のアプリケーションの名前と置き換えます。 この名前は、このアプリケーションを他のアプリケーションから区別するための一意の名前です。 値として this.GetType().FullName を使用することができます。

    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        app.MapAzureSignalR(this.GetType().FullName);
    }
    

    これらの API を使用する前にサービス SDK を参照する必要もあります。 [ツール]、[NuGet パッケージ マネージャー]、[パッケージ マネージャー コンソール] を開き、コマンドを実行します。

    Install-Package Microsoft.Azure.SignalR.AspNet
    

    これらの変更以外はすべてのそのままで、使い慣れたハブ インターフェイスを引き続き使用してビジネス ロジックを作成することができます。

    Note

    この実装では、エンドポイント /signalr/negotiate が Azure SignalR Service SDK によるネゴシエーションに対して公開されます。 クライアントが接続を試行すると特別なネゴシエーション応答が返され、クライアントは接続文字列で定義されたサービス エンドポイントにリダイレクトされます。

  7. F5 を押し、プロジェクトをデバッグ モードで実行します。 アプリケーションがローカルで実行されます。 アプリケーションそのものが SignalR ランタイムをホストする代わりに、Azure SignalR Service に接続するようになります。

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

リソースをクリーンアップする

このアプリの使用を続けない場合は、次の手順に従って、このクイック スタートで作成したすべてのリソースを削除して、課金が発生しないようにします。

  1. Azure Portal の左端で [リソース グループ] を選択し、作成したリソース グループを選択します。 検索ボックスを使用して名前でリソース グループを検索することもできます。

  2. 表示されたウィンドウでリソース グループを選択し、[リソース グループの削除] をクリックします。

  3. 新しいウィンドウで、削除するリソース グループの名前を入力し、[削除] をクリックします。

重要

いったん削除したリソース グループを元に戻すことはできません。リソース グループとそこに存在するすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 このサンプルのホストとなるリソースを、保持するリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、個々のブレードから各リソースを個別に削除することができます。

Azure portal にサインインし、 [リソース グループ] を選択します。

[名前でフィルター] ボックスにリソース グループの名前を入力します。 このクイックスタートの手順では、SignalRTestResources という名前のリソース グループを使用しました。 結果一覧でリソース グループの [...] をクリックし、 [リソース グループの削除] をクリックします。

Delete

しばらくすると、リソース グループとそこに含まれているすべてのリソースが削除されます。

問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください

次のステップ

このクイック スタートでは、新しい Azure SignalR Service リソースを作成して、ASP.NET Web アプリと共に使用しました。 次に、Azure SignalR Service を ASP.NET Core と共に使用して、リアルタイム アプリケーションを開発する方法について学びます。