Я создал Blazor WebAssembly Solution в соответствии с Это руководство . Страница указателя (код ниже, без изменений в руководстве):
- Работает в среде разработки VS2019.
- На другом компьютере P C, который я развертываю на (machine2, Win10 pro), страница также корректно работает на локальном хосте: 5000 (если я запускаю ее вне IIS с помощью команды do tnet AppName.dll )
- Однако на этом P C (machine2), на IIS, на котором SignalR не подключается (страница загружается при подключении к URL-адрес публикации c, но кнопка для отправки сообщения SignalR отключена, поскольку IsConnected имеет значение false и ДЕЙСТВИТЕЛЬНО ОТКЛЮЧЕН).
- A ConsoleApp с идентичным кодом (см. код внизу), не имеет проблем с подключением от machine1 к общедоступному c URL (на machine2), подтверждая, что сам концентратор SignalR работает правильно .
Что вызывает это? Как я могу отладить клиентскую часть?
@page "/"
@using Microsoft.AspNetCore.SignalR.Client
@inject NavigationManager NavigationManager
<div class="form-group">
<label>
User:
<input @bind="_userInput" />
</label>
</div>
<div class="form-group">
<label>
Message:
<input @bind="_messageInput" size="50" />
</label>
</div>
<button @onclick="Send" disabled="@(!IsConnected)">Send</button>
<hr>
<ul id="messagesList">
@foreach (var message in _messages)
{
<li>@message</li>
}
</ul>
@code {
private HubConnection _hubConnection;
private List<string> _messages = new List<string>();
private string _userInput;
private string _messageInput;
protected override async Task OnInitializedAsync()
{
_hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/chatHub"))
.Build();
_hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
{
var encodedMsg = $"{user}: {message}";
_messages.Add(encodedMsg);
StateHasChanged();
});
await _hubConnection.StartAsync();
}
Task Send() =>
_hubConnection.SendAsync("SendMessage", _userInput, _messageInput);
public bool IsConnected =>
_hubConnection.State == HubConnectionState.Connected;
}
Ниже приведено минимальное количество консольных приложений, которое без проблем подключается к концентратору publi c signalR.
using System;
using Microsoft.AspNetCore.SignalR.Client;
namespace ConsoleSignalRDebug
{
class Program
{
static private HubConnection _hubConnection;
static void Main(string[] args)
{
try
{
_hubConnection = new HubConnectionBuilder()
.WithUrl("https://myblazorSite.com:443/chatHub")
.Build();
_hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
{ Console.WriteLine("/////////////RECEIVED///////////////" + user + " " + message);});
_hubConnection.StartAsync().GetAwaiter().GetResult();
string x = Console.ReadLine();
_hubConnection.SendAsync("SendMessage", x, x);
Console.ReadLine();
}
catch (Exception e)
{
throw;
}
}
}
}
Я пробовал это для отладки, но он работает только на консоли (это работает в любом случае):
_hubConnection = new HubConnectionBuilder()
.WithUrl("https://myblazorSite.com:443/chatHub")
.ConfigureLogging(logging =>
{
logging.SetMinimumLevel(LogLevel.Debug);
logging.AddConsole();
})
.Build();