【发布时间】:2019-12-14 23:18:10
【问题描述】:
我正在尝试使用 SignalR 将状态更新分发给监听客户端。但是,我的客户端在尝试启动连接时失败并显示“404 Not found”。
我使用https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc 作为起点,虽然我想要一个 C# 客户端而不是脚本网页。
我已经为中心完成了以下步骤:
- 已将 AspNet Web 应用程序 (.Net Framework 4.5.2) 添加到解决方案中
- 已添加 SignalR 集线器类
- 添加了 Owin 启动类
- 在 IIS 下创建的应用程序 虚拟路径 /MyService .Net CLR 4.0 版 集成管理管道 服务帐号身份
- 使用如图所示的连接代码创建的客户端
在大多数情况下,我的测试围绕着使用各种不同的 URL 尝试两种不同的连接类(Connection 和 HubConnection)。
服务器端使用集线器和 Microsoft.AspNet.SignalR 2.4.1 版库
using Microsoft.AspNet.SignalR;
namespace MyService
{
public class JobStatusHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
}
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(MyService.Startup))]
namespace MyService
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
将有两种类型的客户;消息提供者和消息消费者。到目前为止,我只使用 Microsoft.AspNet.SignalR.Client 版本 2.4.1 处理包含以下代码的消息源
var connection = new Connection("http://localhost/MyService/signalr/");
connection.Credentials = CredentialCache.DefaultCredentials;
connection.Start().Wait();
还有
var connection = new HubConnection("http://localhost/MyService/signalr");
connection.Credentials = CredentialCache.DefaultCredentials;
connection.Start().Wait();
我尝试过各种连接字符串
有趣的是:当我尝试使用
连接到 .Net CORE 集线器时 var connection = new Connection("http://localhost/MyCoreService/myHub");
connection.Credentials = CredentialCache.DefaultCredentials;
connection.Start().Wait();
客户端似乎在抛出时走得更远
StatusCode:405,ReasonPhrase:'方法不允许'
对于什么可以解决这个“404 Not found”错误,有人有什么建议吗?还是我在不使用 CORE 服务和集线器时犯了一个错误(当我查看 Method Not Allowed 错误时,结果显示我无法使用带有 CORE 集线器的 Framework 2.4.1 客户端)?
【问题讨论】:
-
您不能将 CORE 服务器/客户端与 .NET (2.4.1) 服务器/客户端混合使用,它们彼此不兼容。根据您的需要,这两种方法都是完全可行的。
-
谢谢@FrankM - 这证实了我在尝试使用 CORE 集线器时对问题的看法(在最后的旁边提到)。当我在客户端和服务器端都使用 Framework 4.5 时,您能否就这里出了什么问题提供任何想法?
-
出于绝望,我在一些关键调用中尝试随机参数。例如(在多次尝试中)我尝试了 app.MapSignalR("localhost/myServer/jobStatusHub");连同 var connection = new HubConnection("localhost/myServer"); 和 var hubProxy = connection.CreateHubProxy("/jobStatusHub");