传输了几条消息后,ASP.NET MVC 4.5 WebSocket 服务器失去连接

     2023-02-16     199

关键词:

【中文标题】传输了几条消息后,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,但症状是一样的。现在我已将实现更改为第三方库,问题似乎已经解决。

【讨论】:

如何使用 MVC3 ASP.NET 4.5 和 EF6 基于实体属性注释对 TextBoxFor 进行舍入

】如何使用MVC3ASP.NET4.5和EF6基于实体属性注释对TextBoxFor进行舍入【英文标题】:HowtogetTextBoxFortoround,basedonEntityPropertyAnnotations,usingMVC3ASP.NET4.5andEF6【发布时间】:2015-05-2721:55:34【问题描述】:我正在使用MVC3、ASP.NET4.5、EF6、SQLServer2... 查看详情

ASP.Net 4.5 注销/登录失败

】ASP.Net4.5注销/登录失败【英文标题】:ASP.Net4.5logout/loginfail【发布时间】:2015-05-0817:28:52【问题描述】:我正在使用.Net身份验证和最新的VisualStudio13构建一个ASP.NET4.5应用程序(不是MVC另一个大故事)。昨天我做了一些包管理器... 查看详情

ASP.NET MVC Razor 日期时间验证错误消息

】ASP.NETMVCRazor日期时间验证错误消息【英文标题】:ASP.NETMVCRazorDateTimeValidationErrorMessage【发布时间】:2021-12-1419:29:00【问题描述】:所以adjournHearingInfo的newHearingDate当我没有填写为错误信息时值\'\'无效。"值为"1/1/000112:00:00AM"我无... 查看详情

ASP .NET MVC - 向 ajax 调用返回异常消息

】ASP.NETMVC-向ajax调用返回异常消息【英文标题】:ASP.NETMVC-returnExceptionmessagetoajaxcall【发布时间】:2019-12-0404:21:26【问题描述】:我的ajax调用:$.ajax(url:\'./Orders/SaveOrder\',type:"POST",data:JSON.stringify(data),dataType:"JSON",contentType:"app 查看详情

ASP.Net MVC:如何自定义验证消息显示

】ASP.NetMVC:如何自定义验证消息显示【英文标题】:ASP.NetMVC:Howtocustomizevalidationmessageshowing【发布时间】:2016-04-2022:40:47【问题描述】:下面是我在for循环中生成html表并绑定文本框和下拉列表的代码。还使用jqueryunobtrusivelibrary来... 查看详情

ASP.NET MVC 2 + jQuery 灯箱 + 登录

...)转换为模态登录对话框系统,例如Digg中的那个。搜索了几个小时后,我找到的最接近的教程是:http://www.weirdlover.com/2010/0 查看详情

XSP 可以运行 ASP.NET 4.5 吗?

】XSP可以运行ASP.NET4.5吗?【英文标题】:CanXSPrunASP.NET4.5?【发布时间】:2013-12-1705:28:22【问题描述】:我几天来一直在尝试在Mono下启动MVC5(取决于.NET4.5),但没有成功。配置干净安装最新的Lubuntu没有以前的XSP/Mono从最新的git源... 查看详情

ASP.NET 4.5 尚未在 Web 服务器上注册

】ASP.NET4.5尚未在Web服务器上注册【英文标题】:ASP.NET4.5hasnotbeenregisteredontheWebserver【发布时间】:2012-11-2419:23:32【问题描述】:在我的Win7开发机器中,为了使用SQLExpress实例而不是默认安装的localDB。我在MVC4项目属性页面(Web选... 查看详情

AJAX 回调未显示成功消息 - ASP.NET MVC C#

】AJAX回调未显示成功消息-ASP.NETMVCC#【英文标题】:AJAXCallbackNotShowingSuccessMessage-ASP.NETMVCC#【发布时间】:2021-12-2709:53:42【问题描述】:我的JavaScript中有一些AJAX代码没有显示任何成功或失败警报。functionAttemptHouseViewingAppointment(hous... 查看详情

无法覆盖 Kendo Grid 过滤器消息 (ASP.NET MVC)

】无法覆盖KendoGrid过滤器消息(ASP.NETMVC)【英文标题】:CannotoverrideKendoGridfiltermessages(ASP.NETMVC)【发布时间】:2014-12-2011:16:42【问题描述】:我有KendoGrid过滤器消息被覆盖(或者至少我想要一个):(...).Scrollable().Filterable(f=>f.Messag... 查看详情

ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器

】ASP.NET4.5WebAPI2.0,JWT消息处理程序将状态0返回到Angular7HTTP拦截器【英文标题】:ASP.NET4.5WebAPI2.0,JWTMessageHandlerReturnsStatus0toAngular7HTTPInterceptors【发布时间】:2019-10-0803:21:46【问题描述】:提前致谢。实际上,我想使用HTTP拦截器在A... 查看详情

将 Twitter 引导验证样式和消息应用于 ASP.NET MVC 验证

】将Twitter引导验证样式和消息应用于ASP.NETMVC验证【英文标题】:ApplyTwitterBootstrapValidationStyleandMessagetoASP.NETMVCvalidation【发布时间】:2012-07-1303:57:51【问题描述】:如何集成ASP.NETMVC不显眼的验证和TwitterBootstrap?我想适当地拥有所... 查看详情

如何在 ASP.Net MVC 中实现视频文件流式传输?

】如何在ASP.NetMVC中实现视频文件流式传输?【英文标题】:HowtoimplementvideofilestreaminginASP.NetMVC?【发布时间】:2017-07-0714:06:51【问题描述】:我想实现简单的视频文件流。有我的API控制器:[HttpGet][Route("api/VideoContent")]publicHttpRespons... 查看详情

使用谷歌云消息在 Asp.net Webform 或 mvc 中推送通知

】使用谷歌云消息在Asp.netWebform或mvc中推送通知【英文标题】:PushNotificationinAsp.netWebformormvcusinggooglecloudmessaging【发布时间】:2016-10-2514:28:38【问题描述】:HowdoespushnotificationtechnologyworkonAndroid?我已阅读有关堆栈溢出的这篇文章,... 查看详情

为啥会收到奇怪的错误消息 asp.net mvc "elmah.mvc logging library"?

】为啥会收到奇怪的错误消息asp.netmvc"elmah.mvclogginglibrary"?【英文标题】:Whyreceiveweirderrormessagesasp.netmvc"elmah.mvclogginglibrary"?为什么会收到奇怪的错误消息asp.netmvc"elmah.mvclogginglibrary"?【发布时间】:2017-06-25... 查看详情

使用 Ajax.BeginForm Asp.Net MVC 向 jquery 验证显示消息

】使用Ajax.BeginFormAsp.NetMVC向jquery验证显示消息【英文标题】:ShowmessagetojqueryvalidationwithAjax.BeginFormAsp.NetMVC【发布时间】:2019-04-1020:30:36【问题描述】:我已经使用asp.netmvc中的Ajax.BeginForm测试了jqueryvalidate,虽然表单验证,如果表... 查看详情

如何将消息插入取决于会话值的视图。 ASP.NET MVC。最佳实践

】如何将消息插入取决于会话值的视图。ASP.NETMVC。最佳实践【英文标题】:HowtoInsertingmessageintoViewthatdependsonsessionvalue.ASP.NETMVC.Bestpractice【发布时间】:2010-06-0205:50:39【问题描述】:用户必须填写多步骤问卷网络表单,步骤消息... 查看详情

如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?

】如何使用jQuery和ASP.NETMVC从AJAX调用返回错误消息?【英文标题】:HowdoyoureturnerrormessagesfromAJAXcallsusingjQueryandASP.NETMVC?【发布时间】:2010-09-2900:23:55【问题描述】:如果我有一个从jQuery.ajax调用中调用的ASP.NETMVC控制器操作,该操... 查看详情