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");
}