2017-05-24 132 views
0

我正在尝试使用.NET中的SignalR来创建一个既是客户端又是服务器的单个应用程序。最终目标是将其与我们现有的产品相集成,因为一台计算机既可以充当客户端,也可以充当服务器,而其他计算机都是客户端。SignalR HubConnection立即关闭,无错误

Full source code on GitHub.

在客户端启动代码,服务器启动代码完成后运行,下面的代码运行:

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发送消息,并将相同的消息广播回客户端。

关于发生什么问题的任何想法?

+1

如果将URL更改为'http:// localhost:8080/signalr',该怎么办? – Amy

+0

试了一下,没有奏效。启动配置使用“/ signalr”路径进行映射。还尝试在服务器的字符串中添加“/ signalr”(并且两者一起),但没有任何组合可以工作 – Carson

+0

在浏览器网络选项卡中,您应该看到'connect?transport = .....'和'start?transport = .. ...'。那些获得200回应?在第二个请求的情况下,响应主体包含什么内容?你的服务器是否启用了Websocket? (如果你没有使用浏览器来测试,你仍然可以使用Fiddler拦截并检查请求/响应) – Amy

回答

0

修正了它,疯狂愚蠢的错误。我只是从端口8080切换到8089.我想别的什么是使用端口8080,但无论如何,切换客户端和服务器端到端口8089固定它。