我正在尝试的应该是基本的;但必须遗漏一些东西。在本地运行的MVC3应用程序中定义了几个SignalR Hub。相同的解决方案有Windows Phone 8&一个Windows应用商店应用程序,它们都与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集线器。因此,我调整了Signalhost服务器app的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()调用。
我错过了什么?任何指针都会有所帮助..谢谢!
答案 0 :(得分:3)
自己想出来。原来,WPDev仿真器的SignalR连接问题实际上是由于IIS / Windows安全性造成的。 IIS配置和更多通过Windows防火墙打开本地端口修复了问题。博客会关于它;但这两个帖子有所帮助: