我正在尝试的应该是基本的;但一定缺少一些东西。在本地运行的 MVC3 应用程序中定义了几个 SignalR 集线器。相同的解决方案有一个 Windows Phone 8 和一个 Windows Store 应用程序,两者都与 SignalR 集线器进行实时通信。SignalR 服务器使用最新的位,客户端使用最新的 .NET nuget。
在客户端,这是我习惯写的:
IHubProxy SignalRChatHub;
HubConnection chatConnection = new HubConnection("http://localhost:53478/");
SignalRChatHub = chatConnection.CreateHubProxy("ChatHub");
await chatConnection.Start();
if (chatConnection.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
{
// Stuff here.
}
这与 Windows 8 应用程序客户端完美配合,我们可以轻松连接到在 IIS 上本地运行的 SignalR 集线器。但是,相同的代码不适用于 Windows Phone 客户端。connection.start() 出现 404 异常。
经过一番研究,看起来 WP Emulator VM 被视为不同的机器,并虚拟地使用主机的网络。因此,IIS 可能会阻止来自外部的呼叫,不允许从 Windows Phone 8 应用程序访问 SignalR 集线器。因此,我为 SignalR 服务器应用程序调整 applicationhost.config 以允许来自外部 localhost 的连接。所以现在,SignalR 集线器在 localhost 和本地 IP 上都可以正常工作。此外,路由已更改为允许 Global.asax.cs 中的跨域 SignalR 连接:
RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });
Windows Phone 客户端代码更改为:
HubConnection chatConnection = new HubConnection("http://<LocalIP>:53478/");
但这继续使 connection.start() 失败,并出现“远程服务器返回错误:未找到”异常。我让 Fiddler 从电话模拟器中嗅探网络流量,并且在响应 connection.start() 调用时完全没有显示任何内容。
我错过了什么?任何指针都会有所帮助..谢谢!