【问题标题】:SignalR on localhost [duplicate]本地主机上的 SignalR [重复]
【发布时间】:2017-08-06 05:53:45
【问题描述】:

我正在使用本地主机 http://*:52080 运行服务器。 在同一台计算机上,我正在运行客户端并尝试连接到本地 IP 集线器http://192.168.1.102:52080/signalr。一切正常。

但是,如果我在另一台计算机(来自同一本地网络)上运行客户端并尝试连接到http://192.168.1.102:52080/signalr,它不会连接。客户端捕获异常 ("System.AggregateException" in mscorlib.dll)。

带有集线器的计算机上的端口52080 已打开。

失败的原因是什么?

服务器:

using System;
using Microsoft.Owin.Hosting;

public class Program
{
    static void Main(string[] args)
    {
        string url = "http://*:52080";
        using (WebApp.Start<Startup>(url))
        {
            Console.WriteLine("Server running at {0}\n", url);
            Console.ReadLine();
        }
    }
}

Startup.cs

using Owin;
using Microsoft.Owin.Cors;

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}

SGHub.cs

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using System.Collections.Generic;

public class SGHub : Hub
{   
    public static List<string> Users = new List<string>();

    public override Task OnConnected()
    {
        Console.WriteLine("\nOnConnected {0}", Context.ConnectionId);
        Users.Add(Context.ConnectionId);

        Clients.Caller.broadcastMessage("Server:", "Successful connection");
        Clients.Others.broadcastMessage("Server:", "New connection");

        return (base.OnConnected());
    }
}

客户:

using System; 
using Microsoft.AspNet.SignalR.Client; 
using Microsoft.AspNet.SignalR.Client.Hubs; 
using Newtonsoft.Json.Linq; 

class Program
{
    static void Main(string[] args)
    {
        string serverURL = "http://192.168.1.102:52080/signalr";

        Console.WriteLine("Connection to {0}\n", serverURL);
        HubConnection hubConnection = new HubConnection(serverURL);
        IHubProxy myHubProxy = hubConnection.CreateHubProxy("StartGameHub");

        myHubProxy.On<string, string>("Send", (name, message) => Console.Write("Recieved addMessage: " + name + ": " + message + "\n"));
        myHubProxy.On("heartbeat", () => Console.Write("Recieved heartbeat \n"));

        Subscription subscription = myHubProxy.Subscribe("broadcastMessage");
        subscription.Received += SubscriptionData;

        while (true)
        {
            string key = Console.ReadLine();

            if (key.ToUpper() == "A")
            {
                try
                {
                    Console.WriteLine("Start connect..");
                    hubConnection.Start().Wait();
                }
                catch (System.AggregateException e)
                {
                    Console.WriteLine("Connected fauld :(");
                }
            }
        }
    }

    private static void SubscriptionData(IList<JToken> obj)
    {
        Console.WriteLine(obj[1].ToString());
    }
}

【问题讨论】:

  • 防火墙阻止外部连接到端口?
  • 在传入连接的防火墙中,我为端口52080设置了规则并允许连接。
  • 那么,你的AggregateException实际上告诉你什么?
  • 服务器是否托管在 IIS 上?
  • System.AggregateException:出现一个或多个错误。 ---> System.Net.Http.HttpRequestException: 发送请求时出错。 ---> System.Net.WebException:无法连接到远程服务器 ---> System.Net.Sockets.SocketException:连接尝试失败,因为另一台所需的计算机在要求的时间内没有收到所需的响应,或者连接已经建立。违反 For the wrong answer of the computer already connected 192.168.1.102:52080 In System.Net.Sockets.Socket.EndConnect (IAsyncResult asyncResult)

标签: c# asp.net localhost signalr signalr-2


【解决方案1】:

问题不在于代码和实现方法,而在于路由器的平庸故障,在它重新启动并重新启动所有计算机后(以防万一)一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-08-28
    相关资源
    最近更新 更多