我正在尝试创建一个设置,其中我有一个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方案无效。“
我做错了什么?
1条答案
按热度按时间wr98u20j1#
这是Azure SignalR服务工作流。
在您的场景中,您在dotnet核心控制台应用程序中使用了azure signalr服务连接字符串,该应用程序应该是一个web应用程序。
这个控制台应用程序是我截图中的
Web App
,其他客户端(JavaScript或winform(.net core))应该与这个Web应用程序协商并获得安全性,之后客户端可以连接azure signalr服务。