1

我正在尝试的应该是基本的;但一定缺少一些东西。在本地运行的 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() 调用时完全没有显示任何内容。

我错过了什么?任何指针都会有所帮助..谢谢!

4

1 回答 1

3

我自己想通了。原来 WPDev 模拟器的 SignalR 连接问题实际上是由于 IIS/Windows 安全性造成的。更多 IIS 配置和通过 Windows 防火墙打开本地端口解决了这个问题。会写博客;但这两个帖子有所帮助:

于 2013-08-22T15:39:06.913 回答