c# - SignalR AzureFunction 客户端到 AspNetCore WebApi Hub 连接
问题描述
我有一个 webapi (aspnet core 2.2) 应用程序,它调用一个 azure 函数,该函数依次启动一个signalR
连接并将大量数据塞入套接字然后关闭。
直到今天它工作得很好,显然现在似乎发生了一些变化(可能是 signalR 客户端/服务器包更新),这打破了这一点,但有以下例外......
执行“执行”(失败,Id=e2e2a0f8-f56d-4fe1-a445-598b9338cb92)[06/11/2019 10:40:32] System.Private.CoreLib:执行函数时出现异常:执行。Microsoft.AspNetCore.Http.Connections.Common:收到无效的协商响应。Microsoft.AspNetCore.Http.Connections.Common:“Microsoft.AspNetCore.Http.Connections.NegotiateProtocol”的类型初始化程序引发了异常。System.Text.Json:找不到方法:'Int32 System.Text.Encodings.Web.TextEncoder.FindFirstCharacterToEncodeUtf8(System.ReadOnlySpan`1)'。
服务器代码如下...
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR(routeBuilder => {
routeBuilder.MapHub<NotificationHub>("/Hubs/Notification");
routeBuilder.MapHub<WorkflowHub>("/Hubs/Workflow");
});
}
工作流集线器.cs
public class WorkflowHub : Hub
{
public async Task ConsoleSend(string level, string message, string thread)
{
await Clients.Group(thread).SendAsync("ConsoleReceive", level, message, thread);
}
}
...
现在是客户端代码(在天蓝色函数中)......
函数.cs
var con = new HubConnectionBuilder().WithUrl(msg.Api + "Hubs/Workflow").Build();
con.On<Exception>("error", (ex) => Console.WriteLine(ex.Message + "\n" + ex.StackTrace));
await con.StartAsync();
软件包版本:在服务器上... - Microsoft.AspNetCore.Signalr 1.1.0
在 Azure 函数客户端... - Micorsoft.AspNetCore.Signalr.Client 3.0.0
...
我通常使用 Newtonsoft.Json 来满足我的 Json 需求,但是这个新的 System.Text.Json 确实似乎正在获得牵引力,我不确定这是否是某种版本控制问题,但添加了对 System.Text.Json 的 nuget 引用两端对这个问题没有任何影响。
更新
所以我今天早上将整个解决方案升级到 .Net Core 3.0,除了基于 .Net Standard 2.x 的 .Net Standard 程序集。
通过这样做,我可以为新的 System.Text.Json api 或 Newtonsoft.Json 引用相关的协议程序集,但这样做我会遇到更多问题:
它仍然不起作用,它导致异常......
执行“执行”(失败,Id=e2265bbb-e59b-4b51-a0dd-d5798adccac1)[2019 年 11 月 11 日 12:50:46] System.Private.CoreLib:执行函数时出现异常:执行。wf:无法加载文件或程序集“netstandard,版本=2.1.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。该系统找不到指定的文件。System.Private.CoreLib:无法加载指定的文件。
...但除此之外,我在托管集线器的 WebApi 应用程序中进行的一些调用现在无法进行,似乎 OData 框架不喜欢端点路由,并且似乎在 github 上有开放票证表明这种支持仍在进行中。
但无论哪种方式...... SignalR 仍然没有在这里打球。
有没有人有一个工作示例,它同时具有 .Net Core 和基于 Web 的客户端与 .Net Core 集线器通信,它们都在 .Net Core 2.x 或 .Net Core 3.x 下运行,因为我似乎找不到所有这些都可以在任何地方工作吗?
解决方案
看起来这是构建的缓存问题。为单个构建配置清理构建似乎会导致“在某些情况下我无法确定”构建从另一个构建定义中获取程序集的版本。
最终结果是,我在整个解决方案中对我的 nuget 缓存和 bin 文件夹进行了完全手动清理,这一切都变得生动起来。
对我来说,这似乎是一个工具问题,而不是版本控制/框架问题。
推荐阅读
- react-native - 深度链接到堆栈导航器 v5 问题
- r - R:“For循环”是创建一个文件而不是两个文件
- reactjs - 为什么当我在 redux 中这个 reducer 中的状态发生变化时我的状态没有重新渲染
- javascript - 如何检测使用jQuery点击的链接中的扩展名
- amazon-web-services - 获取用户唯一标识符 - iOS + Amplify
- python - 如何让子类中的构造函数继承构造函数或基类?
- javascript - 将当前加载的 HTML 代码发送 (POST) 到本地托管的服务器
- deep-learning - 体重更新应该怎么做?
- javascript - 如何在提交表单时自动将表单响应的最后一行复制到另一张表的最后一行
- meshlab - meshlab 是否支持基于分辨率(即 1mm)重新划分网格?