C# 传输几条消息后,ASP.NET MVC 4.5 WebSocket服务器失去连接
我刚开始玩WebSocket和ASP.NET,遇到了一个奇怪的问题。我正在构建一个非常原始的ASP.NET 4.5 WebAPI应用程序,该应用程序应该作为一个echo服务器,如下所示:C# 传输几条消息后,ASP.NET MVC 4.5 WebSocket服务器失去连接,c#,asp.net,asp.net-mvc,websocket,C#,Asp.net,Asp.net Mvc,Websocket,我刚开始玩WebSocket和ASP.NET,遇到了一个奇怪的问题。我正在构建一个非常原始的ASP.NET 4.5 WebAPI应用程序,该应用程序应该作为一个echo服务器,如下所示: using Microsoft.Web.WebSockets; // ... namespace MyControllers { internal class EchoHandler : WebSocketHandler { public override void OnClo
using Microsoft.Web.WebSockets;
// ...
namespace MyControllers
{
internal class EchoHandler : WebSocketHandler
{
public override void OnClose()
{
System.Diagnostics.Debug.Write("Close");
}
public override void OnError()
{
System.Diagnostics.Debug.Write("Error: " + this.Error.ToString());
}
public override void OnOpen()
{
System.Diagnostics.Debug.Write("Open");
}
public override void OnMessage(string message)
{
System.Diagnostics.Debug.Write("Message: " + message);
this.Send("Echo: " + message);
}
}
public class EchoController : ApiController
{
public HttpResponseMessage Get()
{
if (HttpContext.Current.IsWebSocketRequest)
{
HttpContext.Current.AcceptWebSocketRequest(new EchoHandler());
return Request.CreateResponse(HttpStatusCode.SwitchingProtocols);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}
}
我正在使用用C#编写的Windows应用商店应用程序连接到此服务。相关代码如下所示:
class WebsocketTest
{
private MessageWebSocket webSocket;
private DataWriter messageWriter;
private async Task Connect()
{
var server = new Uri("ws://127.0.0.1:81/");
webSocket = new MessageWebSocket();
webSocket.Control.MessageType = SocketMessageType.Utf8;
webSocket.MessageReceived += messageWebSocket_MessageReceived;
webSocket.Closed += messageWebSocket_Closed;
await webSocket.ConnectAsync(server);
messageWebSocket = webSocket;
messageWriter = new DataWriter(webSocket.OutputStream);
}
private async Task Send(string message)
{
try
{
messageWriter.WriteString(message);
await messageWriter.StoreAsync();
}
catch (Exception ex)
{
var error = WebSocketError.GetStatus(ex.GetBaseException().HResult);
}
}
}
这可以正常工作一段时间,但是在来回发送任意数量的消息之后,在服务器上调用OnError(),我得到以下异常:“由于线程退出或应用程序请求,I/O操作已中止”(似乎是“This.Send(…)”引起的)。如果我继续在客户机上发送内容,调用“dataWriter.StoreAsync()”时会出现“ConnectionAborted”错误。
该错误每次都会发生,但在发生之前需要不同数量的消息。使用较长的消息似乎可以加快进程
为了进行测试,我还尝试使用普通的AspNetWebSockets代替WebSocketHandler,但结果相同
有什么想法吗
提前谢谢你,
Kai这是一个bug(我报道):
很长一段时间以来,我一直试图找到一个解决办法,但没有成功。我使用的是
HttpListener
,但症状是一样的。现在我已经将实现更改为第三方库,问题似乎已经解决