Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传输几条消息后,ASP.NET MVC 4.5 WebSocket服务器失去连接_C#_Asp.net_Asp.net Mvc_Websocket - Fatal编程技术网

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

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

我刚开始玩WebSocket和ASP.NET,遇到了一个奇怪的问题。我正在构建一个非常原始的ASP.NET 4.5 WebAPI应用程序,该应用程序应该作为一个echo服务器,如下所示:

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
,但症状是一样的。现在我已经将实现更改为第三方库,问题似乎已经解决