Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信令器/Owin自主机-交换端口_C#_Signalr_Owin_Self Hosting_Signalr.client - Fatal编程技术网

C# 信令器/Owin自主机-交换端口

C# 信令器/Owin自主机-交换端口,c#,signalr,owin,self-hosting,signalr.client,C#,Signalr,Owin,Self Hosting,Signalr.client,我的应用程序是一个使用信号器进行通信的服务/客户端。我正在尝试实现这样一个场景,信号服务器优雅地切换到另一个端口。以下是创建或切换服务器的方式: public void StartListen(int port) { StopListen(); var url = string.Format("http://localhost:{0}/test1", port); webApp = WebApp.Start(url, app =

我的应用程序是一个使用信号器进行通信的服务/客户端。我正在尝试实现这样一个场景,信号服务器优雅地切换到另一个端口。以下是创建或切换服务器的方式:

    public void StartListen(int port)
    {
        StopListen();

        var url = string.Format("http://localhost:{0}/test1", port);

        webApp = WebApp.Start(url, app =>
        {
            app.MapSignalR<Endpoint>("/endpoint");
        });

        Log("Listening on {0}", url);
    }

    public void StopListen()
    {
        if (webApp != null)
        {
            webApp.Dispose();
            webApp = null;
        }
    }

    public void Pong()
    {
        var context = GlobalHost.ConnectionManager.GetConnectionContext<Endpoint>();
        context.Connection.Broadcast("pong");
    }
我还有一个客户端对象,它将连接切换到一个新端口,如下所示:

    Microsoft.AspNet.SignalR.Client.Connection connection;

    public void StartConnection(int port)
    {
        StopConnection();

        var url = string.Format("http://localhost:{0}/test1/endpoint", port);
        connection = new Microsoft.AspNet.SignalR.Client.Connection(url);
        connection.Start().ContinueWith(task => Log("Connected"));
    }

    public void StopConnection()
    {
        if (connection != null)
        {
            connection.Stop();
            connection.Dispose();
            connection = null;

            Log("stopped");
        }
    }

    private void ConnectionReceivedHandler(string obj)
    {
        Log("Got: {0}", obj);
    }

    public void Ping()
    {
        connection.Send("ping");
    }
这是正确的实现吗?我提出这个问题的原因是,以下一系列行动导致了混乱:

  • 开始侦听端口4080
  • 客户端连接到端口4080(乒乓工作)
  • 客户端断开连接
  • 开始侦听端口4081
  • 客户端无法连接
但是,以下顺序可以正常工作:

  • 开始侦听端口4080
  • 开始侦听端口4081
  • 客户端连接到端口4081(乒乓工作)

我怀疑我没有做一些我必须做的事情,以使shenanigan正常工作

当您自托管时,您将希望使用自定义依赖项解析程序并完全避免GobalHost。连接停止和处理也是一样的。你能详细解释一下这到底意味着什么吗?任何有例子的URL?另外,如果你能把它贴成“答案”,我就可以给你一个代表。
    Microsoft.AspNet.SignalR.Client.Connection connection;

    public void StartConnection(int port)
    {
        StopConnection();

        var url = string.Format("http://localhost:{0}/test1/endpoint", port);
        connection = new Microsoft.AspNet.SignalR.Client.Connection(url);
        connection.Start().ContinueWith(task => Log("Connected"));
    }

    public void StopConnection()
    {
        if (connection != null)
        {
            connection.Stop();
            connection.Dispose();
            connection = null;

            Log("stopped");
        }
    }

    private void ConnectionReceivedHandler(string obj)
    {
        Log("Got: {0}", obj);
    }

    public void Ping()
    {
        connection.Send("ping");
    }