AspNetCore WebApi集线器连接的SignalR AzureFunction客户端

问题描述 投票:0回答:1

我有一个webapi(aspnet核心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:找不到方法:'Int32System.Text.Encodings.Web.TextEncoder.FindFirstCharacterToEncodeUtf8(System.ReadOnlySpan`1)'。

服务器代码如下...

Startup.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");
    });
}

WorkflowHub.cs

public class WorkflowHub : Hub
{
    public async Task ConsoleSend(string level, string message, string thread)
    {
        await Clients.Group(thread).SendAsync("ConsoleReceive", level, message, thread);
    }
}

...

现在还有客户端代码(在azure函数中)...

Function.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添加nuget引用。两端的Json对此问题没有影响。

更新

因此,除了基于.Net Standard 2.x的.Net Standard程序集,今天上午我将整个解决方案升级到.Net Core 3.0。

通过这样做,我可以为新的System.Text.Json api或Newtonsoft.Json的API引用相关的协议程序集,但这样做会遇到更多问题:

它仍然不起作用,它导致异常...

已执行'执行'(失败,Id = e2265bbb-e59b-4b51-a0dd-d5798adccac1)[11/11/2019 12:50:46] System.Private.CoreLib:执行函数时异常:执行。 wf:无法加载文件或程序集'netstandard,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'。该系统找不到指定的文件。 System.Private.CoreLib:无法加载指定的文件。

...但此外,我现在无法在托管集线器的WebApi应用程序中进行了一些调用,似乎OData框架不喜欢端点路由,并且似乎在打开票证表示该支持仍在进行中的github。

但是无论如何... SignalR在这里仍然没有发挥作用。

没有人有一个可行的示例,该示例同时具有.Net Core和与.Net Core集线器通信的基于Web的客户端,它们都在.Net Core 2.x或.Net Core 3.x下运行,就像我所看到的找到所有这些都可以在任何地方工作?

c# asp.net-core signalr asp.net-core-signalr
1个回答
0
投票

看起来这是构建的缓存问题。为单个构建配置清除构建似乎会导致“在某些情况下我无法固定”该构建,从而从另一个构建def中拾取程序集的一个版本。

最终结果是,在整个解决方案中,我对nuget缓存和bin文件夹进行了完整的手动清理,并且全部恢复了生命。

似乎对我来说是一个工具问题,而不是版本控制/框架问题。

© www.soinside.com 2019 - 2024. All rights reserved.