winforms 使用Azure SignalR Service连接到SignalR Hub

szqfcxe2  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在尝试创建一个设置,其中我有一个azure signalr服务。
然后我托管一个本地服务器,它是一个dotnet核心控制台应用程序,它使用connectionstring“连接”到azure signalr服务。
然后我有一个客户端(winforms),它试图使用相同的connectionstring连接到相同的azuresignalr服务。
但我得到这个错误:System.UriFormatException:'无效URI:URI方案无效。当我尝试启动客户端时。
我在Azure门户网站上创建了一个Azure Signalr服务。
然后我创建了C# dotnet核心控制台应用程序,当它运行时,它使用connectionstring添加了azure signalR服务:

// Add services to the container.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

builder.Services.AddSignalR().AddAzureSignalR(@"Endpoint=<my url>.service.signalr.net;AccessKey=<my accesskey>;Version=1.0;");

var app = builder.Build();
app.MapHub<ChatSampleHub>("/ChatSampleHub");

它运行良好,当我启动我的控制台应用程序时,我在Azure门户网站上看到一个服务器已经启动并运行。
我有一个这样的类ChatSampleHub:

public class ChatSampleHub : Hub
{
    public Task BroadcastMessage(string name, string message) =>
    Clients.All.SendAsync("broadcastMessage", name, message);

    public Task SendMessage(string message) =>
    Clients.All.SendAsync("MessageReceived", message);

    public Task Echo(string name, string message) =>
        Clients.Client(Context.ConnectionId)
                .SendAsync("echo", name, $"{message} (echo from server)");
}

现在我已经创建了一个winforms应用程序,我想调用chathub并广播给所有其他客户端。到目前为止,当用户单击连接按钮时,我在客户端上有这样的操作:

private async void buttonConnect_Click(object sender, EventArgs e)
{
    hubConnection = new HubConnection(AzureSignalRConnectionString);
    hubProxy = hubConnection.CreateHubProxy("/ChatSampleHub");

    hubProxy.On<string>("MessageReceived", message =>
    {
        // Handle incoming message
        // This is just an example; you can update your UI or perform any desired action here
        AppendMessageToTextBox(message);
    });

    try
    {
        await hubConnection.Start();
        MessageBox.Show("Connected to Azure SignalR");
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error connecting to Azure SignalR: " + ex.Message);
    }
}

AzureSignalRConnectionString与我在控制台应用程序中使用的connectionstring相同。但是当我调用await hubConnection.Start();我得到这个错误:System.UriFormatException:'无效URI:URI方案无效。“
我做错了什么?

wr98u20j

wr98u20j1#

这是Azure SignalR服务工作流。

在您的场景中,您在dotnet核心控制台应用程序中使用了azure signalr服务连接字符串,该应用程序应该是一个web应用程序。
这个控制台应用程序是我截图中的Web App,其他客户端(JavaScript或winform(.net core))应该与这个Web应用程序协商并获得安全性,之后客户端可以连接azure signalr服务。

相关问题