SignalR:无法连接到本地或任何其他IP地址

时间:2016-06-29 13:10:50

标签: asp.net-mvc c#-4.0 server signalr signalr-hub

我正在努力建立SignalR服务器和客户端架构,我能够连接到“http://localhost:8080”或http://127.0.0.1:8080/,但我无法连接我的本地IP地址,如“192. xxx “那么可能是什么原因? 请帮助我,我也将我的代码放在一边......

 public partial class WinFormsServer : Form
        {
            private IDisposable SignalR { get; set; }
            const string ServerURI = "http://localhost:8080";

     private void ButtonStart_Click(object sender, EventArgs e)
            {
                WriteToConsole("Starting server...");
                ButtonStart.Enabled = false;
                Task.Run(() => StartServer());
            }
     private void StartServer()
            {
                try
                {
                    SignalR = WebApp.Start(ServerURI);
                }
                catch (TargetInvocationException)
                {
                    WriteToConsole("Server failed to start. A server is already running on " + ServerURI);
                    //Re-enable button to let user try to start server again
                    this.Invoke((Action)(() => ButtonStart.Enabled = true));
                    return;
                }
                this.Invoke((Action)(() => ButtonStop.Enabled = true));
                WriteToConsole("Server started at " + ServerURI);
            }
     class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.UseCors(CorsOptions.AllowAll);
                app.MapSignalR();
            }
        }

    }

3 个答案:

答案 0 :(得分:1)

我尝试了不同的解决方案但找不到正确的解决方案。

最后我发现该问题仅与权限有关。 以管理员身份运行SignalR服务器应用程序 。它将开始在本地IP上运行,如 192.168.X.X:9090 ,然后您的客户端应用程序可以使用此IP地址从任何其他PC连接此服务器。

class Program
{
    static void Main(string[] args)
    {
        var url = $"http://{GetLocalIPAddress()}:8080";
        using (WebApp.Start<Startup>(url))
        {                
            Console.WriteLine($"Server running at {{{url}}}");
            Console.ReadLine();
        }
    }

    public static string GetLocalIPAddress()
    {
        var host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (var ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }
        throw new Exception("Local IP Address Not Found!");
    }

}

答案 1 :(得分:0)

要获得local IP address,您可以使用此功能:

public static string GetLocalIPAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            throw new Exception("Local IP Address Not Found!");
        }

如果您想使用FQDN - 完全限定域名,则可以使用此功能:

public static string GetLocalFQDN()
        {
            var props = IPGlobalProperties .GetIPGlobalProperties();
            return props.HostName + (string.IsNullOrWhiteSpace(props.DomainName) ? "" : "." + props.DomainName);
        }

之后你可以使用:

SignalR = WebApp.Start("http://" + GetLocalFQDN() + ":8080");  

SignalR = WebApp.Start("http://" + GetLocalIPAddress() + ":8080");  

我希望这会有所帮助。

答案 2 :(得分:0)

由于您使用的是this source,我也使用了相同的词 - 对于FQDN,首先创建下面的函数。

public static string GetLocalFQDN()
                {
                    var props = IPGlobalProperties.GetIPGlobalProperties();
                    return props.HostName + (string.IsNullOrWhiteSpace(props.DomainName) ? "" : "." + props.DomainName);
                }

然后将const string ServerURI修改为:

string ServerURI =String.Concat("http://",GetLocalFQDN(),":8080");

- 对于LocalIPAdress,首先创建下面的函数,该函数将是您的本地地址:

public static string GetLocalIPAddress()
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            throw new Exception("Local IP Address Not Found!");
        }

并将string ServerURI =String.Concat("http://",GetLocalFQDN(),":8080");更改为:

string ServerURI =String.Concat("http://",GetLocalIPAddress(),":8080");

希望这会对你有所帮助。

注意:更改应在WinFormsServer:Form项目的WinFormsServer课程中完成。