传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接
Posted
技术标签:
【中文标题】传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接【英文标题】:ASP.NET MVC 4.5 WebSocket server loses connection after a few messages have been transferred 【发布时间】:2014-01-29 13:12:04 【问题描述】:我刚刚开始使用 WebSockets 和 ASP.NET 并遇到了一个奇怪的问题。我正在构建一个非常原始的 ASP.NET 4.5 WebAPI 应用程序,它应该像这样用作回声服务器:
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,但结果相同。
有什么想法吗?
提前非常感谢, 启
【问题讨论】:
【参考方案1】:这是一个错误(由我报告):https://connect.microsoft.com/VisualStudio/feedbackdetail/view/976851/server-websocket-closed-abruptly-the-i-o-operation-has-been-aborted-because-of-either-a-thread-exit-or-an-application-request
很长一段时间以来,我一直试图找到一种解决方法,但没有成功。我正在使用HttpListener
,但症状是一样的。现在我已将实现更改为第三方库,问题似乎已经解决。
【讨论】:
以上是关于传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接的主要内容,如果未能解决你的问题,请参考以下文章
Response.WriteFile() - 不工作 asp net mvc 4.5
如何使用 MVC3 ASP.NET 4.5 和 EF6 基于实体属性注释对 TextBoxFor 进行舍入
ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器