gpt4 book ai didi

signalr - 是什么导致 SignalR 在连接时收到 net::ERR_CONNECTION_RESET?

转载 作者:行者123 更新时间:2023-12-02 10:34:38 37 4
gpt4 key购买 nike

我有一个简单的 SingulaR 示例,已将其添加到旧版 ASP.Net MVC 应用程序中。

以下是各个部分:

OWIN 启动类(class)

[assembly: OwinStartup(typeof (Startup))]

namespace MyApp.Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}

SignalR 中心

using System.Collections.Generic;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace MyApp.Web
{
[HubName("podService")]
public class PodServiceHub : Hub
{
public PodServiceHub()
{
;
}

public IEnumerable<string> GetMessages()
{
return new[] {"blah", "blah", "blah"};
}
}
}

服务器端外观

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace MyApp.Web
{
public class PodService
{
PodService(IHubConnectionContext<dynamic> clients)
{
Clients = clients;
}

public PodService()
: this(GlobalHost.ConnectionManager.GetHubContext<PodServiceHub>().Clients)
{
}

IHubConnectionContext<dynamic> Clients { get; set; }

public void SendMessageToClient(string message)
{
Clients.All.doSomething(message);
}
}
}

启动 Javascript 的部分内容:

    var podService = $.connection.podService;

...



$.extend(podService.client, {
doSomething: function(message) {
console.log("received message:" + message);
}
});


// test
$.connection.hub.start()
.done(function() {
podService.server.getMessages()
.done(function(messages) {
console.log("received message:" + message);
});
});

在第一页调用的一个 Controller 中:

_podService.SendMessageToClient("Hello from the server!");

执行应用程序后,Chrome 开发工具的控制台中会显示以下错误:

WebSocket 连接到 'ws://localhost:62025/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=02LJFqBcRBWKXAOlaSwgMPWG0epV7AFl19gNjFCvA0dxD2QH8%2BC9V028Ehu8fYAFN%2FthPv65JZKfK2MgCEdihCJ 0A2dMyENOcdPkhDzEwNB2WQ1X4QXe1fiZAyMbkZ1b&connectionData=%5B%7B%22name%22%3A%22podservice%22%7D%5D&tid =6'失败:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET

但是,在此错误之后, podService.server.getMessages() 返回来自服务器的消息,打印 ["blah", "blah", "blah"] 到控制台,随后调用 doSomething 客户端函数打印“收到消息:来自服务器的您好!”。

来自客户端和服务器的调用都在传输数据,因此此错误似乎不会破坏应用程序。但这似乎确实是一个问题。上面的代码基于 Microsoft.AspNet.SignalR.Sample NuGet 包生成的示例代码,但它不显示相同的行为。我知道我的示例和基于 NuGet 的示例之间的唯一区别是,我已将其添加到旧版 MVC 应用程序与纯基于 OWIN 的应用程序中。根据我读过的评论on this SO question这不应该是一个问题。

那么,这个示例用法有什么问题和/或可能导致连接重置的原因是什么?

最佳答案

我确定:

  1. the web socket component is enabled in IIS
  2. and the "allowKeepAlive" setting is not set to false in my web.config

但就我而言,问题是由软件包版本不匹配引起的:
在packages.config中,意外引用了Microsoft.Owin.Host.SystemWeb版本2.1.0

<package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net452" />

虽然所有其他 Owin 相关软件包都引用版本 3.0.1
我将 Microsoft.Owin.Host.SystemWeb 更新到版本 3.0.1

然后我必须确保 web.config 文件中的“httpRuntime”元素针对框架版本 4.5

  <system.web>
<httpRuntime targetFramework="4.5" />
</system.web>

以上两个步骤解决了问题。

关于signalr - 是什么导致 SignalR 在连接时收到 net::ERR_CONNECTION_RESET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469847/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com