やりたいこと
.NET Frameworkで動作するwindowsアプリと、サーバ(Azure上のWebApp)の間でリアルタイム通信をしたい。通信にはAzure SignalRを使いたい。
疑問
- Azure SignalR ServiceはASP.NET Core SignalRをベースとしている。.NET Frameworkで動作するアプリからASP.NET Core SignalRを使用することは可能か?
確認結果
- このページに、ASP.NET Core SignalRのクライアントにはMicrosoft.AspNetCore.SignalR.Clientを使用するという記載がある
- Microsoft.AspNetCore.SignalR.Clientを見ると、.NET Framework4.6.2以上と互換性があると書いてある
やってみる
サーバ
- Azure上にSignalR Service/AppServiceをデプロイ
- AppServiceにはこのサンプルをそのままデプロイ(Azure SignalR Serviceの接続文字列はデプロイしたものに合わせて変更する)
クライアント
- これを参考に下記のようにコーディング
using Microsoft.AspNetCore.SignalR.Client;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private HubConnection _connection;
public Form1()
{
InitializeComponent();
_connection = new HubConnectionBuilder().WithUrl("https://webappのドメイン/Hubの名称").WithAutomaticReconnect().Build();
}
private async void btnConnect_Click(object sender, EventArgs e)
{
_connection.On<string, string>("broadcastMessage", (user, message) => {
MessageBox.Show(message);
});
try
{
await _connection.StartAsync();
}
catch (Exception ex)
{
}
}
private async void btnSend_Click(object sender, EventArgs e)
{
await _connection.InvokeAsync("broadcastMessage", txtName.Text, txtMessage.Text);
}
}
}