【发布时间】:2017-05-24 21:15:19
【问题描述】:
我正在尝试使用 .NET 中的 SignalR 制作一个既是客户端又是服务器的应用程序。最终目标是将它与我们现有的产品集成,这需要既是客户端又是服务器,因为一台计算机充当两者,而其他计算机都是客户端。
在服务器启动代码完成后运行的客户端启动代码中,运行以下代码:
m_hubConnection = new HubConnection( "http://localhost:8080/" );
m_myHubProxy = m_hubConnection.CreateHubProxy( nameof( ServerHub ) );
m_myHubProxy.On<string, string>( nameof( ServerHub.BroadCastMessage ), ( name, message ) => OnMessageReceived( name, message ) );
m_hubConnection.Closed += OnClosed;
m_hubConnection.Error += OnErrorReceived;
await m_hubConnection.Start(new WebSocketTransport());
await SendMessage( "Startup", "Sending from same thread as connection established" );
几乎立即调用 OnClosed 回调,因此连接在启动时立即关闭。
OnErrorReceived 回调永远不会被调用,因此它不会因为任何明显的错误而关闭
Start 方法挂起并且从不回调
SendMessage 方法永远不会被命中
理想情况下,我希望连接打开,保持打开状态,点击 SendMessage,向 Hub 发送消息,然后将相同的消息广播回客户端。
对出了什么问题有任何想法吗?
【问题讨论】:
-
如果将 URL 更改为
http://localhost:8080/signalr会怎样? -
试一试,没有成功。 StartUp 配置映射到“/signalr”路径。还尝试将“/signalr”添加到服务器的字符串(两者一起),但没有任何组合起作用
-
在您的浏览器网络选项卡中,您应该看到
connect?transport=.....和start?transport=.....。那些得到 200 个响应?在第二个请求的情况下,响应正文包含什么?您的服务器是否启用了 websockets? (如果你不使用浏览器来测试这个,你仍然可以使用 Fiddler 来拦截和检查请求/响应) -
应该澄清一下,我不是通过 ASP.NET 网页做的,它是一个控制台应用程序。我分叉了这个项目来尝试这个带有两个控制台应用程序的仓库,所以我试图将两个工作控制台应用程序合并为一个。所以浏览器的网络选项卡中没有信息。如果您想比较或查看,Here's the original 2 console programs working 和 here's my merged not working version
-
您仍然可以使用 fiddler 收集诊断信息。
标签: c# .net signalr signalr-hub signalr.client