4

我只是玩了一下signalR。我的应用程序只有一个简单的集线器,它存储在 ASP.NET 应用程序中,我编写了一个WPF 客户端,它通过集线器连接和创建的代理与 ASP.NET 应用程序进行交互。在我的本地 PC 上一切正常。我在IIS上部署了ASP.NET 应用程序

现在我要进入正题了……

当我在我自己的PC 上的浏览​​器中输入以下内容时(pcthi-and)

http://pcthi-and:8080/signalr/hubs

我会得到我想要的

当我在另一台电脑的浏览器中输入相同的 url 时,我会得到相同的响应,并且一切看起来都很好。

但我的应用程序只能在我的电脑上运行,而不能在另一台电脑上运行。当我在另一台电脑上启动 hubconnection 时,我没有得到 connectionId。

我试图将 url 更改为我的 IP 地址,但没有效果。

浏览器调用集线器有效,但应用程序不起作用。

调用如下所示:

private bool tryToConnectToCoffeService()
    {
        try
        {
            this.hubConnection = new HubConnection(ConfigurationManager.ConnectionStrings["coffeeConnection"].ConnectionString);

            this.hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;

            this.coffeeService = this.hubConnection.CreateHubProxy("coffee");

            this.hubConnection.Start();

            if (string.IsNullOrEmpty(hubConnection.ConnectionId))
            {
                return false;
            }

            return true;
        }
        catch(Exception ex)
        {
            return false;
        }
    }

Global.asax:

public class Global : System.Web.HttpApplication
{

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHubs();
    }

像这样的枢纽

[HubName("coffee")]
public class CoffeeHub : Hub
{

我的集线器连接字符串是这样的:

"http://pcthi-and:8080/"

或者:

"http://My-Current-IP-Address:8080/"

我使用 SignalR 1.0 rc2。

有人有想法吗?感谢您的帮助。

干杯

坦率

4

1 回答 1

1

我认为你需要改变

hubConnection.Start();

hubConnection.Start().Wait();

如果您正在运行 .NET 4.5,则可以创建该tryToConnectToCoffeService方法async,然后await在启动集线器连接时。

await hubConnection.Start();

它今天可能在 localhost 上工作,因为客户端可以在if (string.IsNullOrEmpty(hubConnection.ConnectionId))执行之前完成连接。

从另一台机器连接可能需要更长的时间,这会在您不等待HubConnection.Start()完成时暴露存在的竞争条件。

于 2013-02-12T18:45:37.657 回答