技術ブログ

プログラミング、IT関連の記事中心

SignalRでの連携(WPFアプリ)

■はじめに

本記事は、SignalRを利用して、UWPのアプリからWPFのアプリのメソッドを実行する為の方法をまとめた記事の、WPFアプリの作成記事です。

■手順

Visual Studioの新規プロジェクト作成より、「WPF アプリ(.NET Framework)」を選択し、「次へ」を押下する。

プロジェクト名に任意の名前を設定し、「作成」を押下する。

プロジェクトが起動したら、「ソリューション エクスプローラー」のプロジェクト名を右クリックする。

右クリックで出てきたポップアップの「NuGet パッケージ管理」を選択する。

NuGetのウィンドウの「参照」を押下する。

検索項目に「Microsoft.AspNet.SignalR.Core」を入力し、対象のパッケージを選択後、「インストール」ボタンを押下する。

※ライセンスの同意などを行い、NuGetがインストールされるのをまつ。

※「インストール」を押下場所が「アンインストール」に変われば、インストール成功です。

同様の手順で、以下のパッケージをインストールする。(一番上は、上記手順でインストールされているはずです。)

Microsoft.AspNet.SignalR.Core
Microsoft.AspNet.SignalR.SystemWeb
Microsoft.Owin.Cors
Microsoft.Owin.Hosting
Microsoft.Owin.Host.HttpListener

「ソリューション エクスプローラー」のプロジェクト名を右クリックし、「追加」内の「クラス」を選択する。

「クラス」が選択されている状態で、「名前」に「AppStartup.cs」を入力し、「追加」を押下する。

※同様の手順で、「SampleHub.cs」クラスも作成する。

出来上がった「AppStartup」クラスに以下を記載する。

using Microsoft.Owin.Cors;
using Owin;

namespace SignalRSampleServer
{
    class AppStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR("/device", new Microsoft.AspNet.SignalR.HubConfiguration());
        }
    }
}

出来上がった「SampleHub」クラスに以下を記載する。

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace SignalRSampleServer
{
    [HubName("Sample")]
    public class SampleHub : Hub
    {
        public void CallSample()
        {
            System.Diagnostics.Debug.WriteLine("=====SampleHubの呼び出す=====");
        }
    }
}

プロジェクト作成時に用意されていた、「MainWindow.xaml」を展開し、「MainWindow.xaml.cs」を開き、以下になるように記載する。

※具体的には、「_startup」のグローバル変数の追加と、「MainWindow」のコンストラクタ内で、ローカルホストの起動を追加しています。

using Microsoft.Owin.Hosting;
using System;
using System.Windows;

namespace SignalRSampleServer
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {

        private IDisposable _startup;

        public MainWindow()
        {
            InitializeComponent();
            _startup = WebApp.Start<AppStartup>("http://localhost:8080");
        }
    }
}

こちらのソースは以下のGithubにアップしています。

https://github.com/nakkann-1013/SignalR_WPF_Sample_Server