在Elastic Beanstalk上托管C#WebSocket服务器
我从头编写了一个WS-server,并试图将其托管在AWS弹性Beanstalk服务上。但是,我只找到了一种将其添加到web项目(可以托管在EB上)的方法,方法是在startup上添加一个线程。cs:在Elastic Beanstalk上托管C#WebSocket服务器,c#,amazon-web-services,amazon-elastic-beanstalk,tcplistener,C#,Amazon Web Services,Amazon Elastic Beanstalk,Tcplistener,我从头编写了一个WS-server,并试图将其托管在AWS弹性Beanstalk服务上。但是,我只找到了一种将其添加到web项目(可以托管在EB上)的方法,方法是在startup上添加一个线程。cs: Thread thr = new Thread(() => { var ws = new WebsocketServer(); }); thr.IsBackground = true;
Thread thr = new Thread(() =>
{
var ws = new WebsocketServer();
});
thr.IsBackground = true;
thr.Start();
令我高兴和惊讶的是,我能够在本地成功地测试它,并且它工作得非常好,但是当使用EB时,我无法连接到任何东西(即使我99%确定我正在向适当的URL发送请求)。我已尝试添加指定的端口,但没有任何帮助。
我使用的是一个初始化如下的TcpListener:
TcpListener server = new TcpListener(IPAddress.Parse(“127.0.0.1”), 443);
server.Start();
并接受具有TcpClient的客户端,如下所示:
TcpClient client = new TcpClient();
client = server.AcceptTcpClient();
现在根据我的经验,我假设连接工作正常,但EB不会自动将其设置为公共访问。有没有办法做到这一点?使用与web应用程序相同的端口是否有帮助?(如果是,如何设置/查看它使用的端口?)。由于WS是通过HTTP请求启动的,是否有可能使用以下格式的控制器方法建立连接:
[Route("ws")]
[HttpGet]
public async Task<IActionResult> ConnectWS()
{
return await AddClient();
}
[路由(“ws”)]
[HttpGet]
公共异步任务ConnectWS()
{
返回wait AddClient();
}
我没有为正在使用的EB环境设置负载平衡器
最后,如果这是一个不好的做法或不可行,是否有其他AWS服务可以用来托管服务器,方便设置公共连接
谢谢大家! 看看你的代码,你需要打开443端口的流量。根据您的Elastic Beanstalk配置(带负载平衡器?或不带负载平衡器?请用此更新您的问题),您已接近将其用于AWS 这些高级步骤将帮助您实现目标:
server.crt
文件,并将内容粘贴到顶部框中,标签为:Certificate body。然后用您喜爱的文本编辑器打开步骤2中的privatekey.cer
文件,并将内容粘贴到第二个框中,标签为:Certificate private key。单击“查看并导入”,确保一切正常如果您的问题有更多配置细节的更新,请尝试并回复。我认为您已经接近完成并在AWS上运行它了。只是想澄清一下,这是为了设置https/ws连接吗?我目前正在测试一个不安全的连接(比如说端口80),它同样会失败。我回到了非安全状态,因为我无法设置它,所以我肯定会使用这个答案,但首先我想看看是否有任何连接可以工作。您是否通过visual Studio中的AWS工具包进行部署?