繁体   English   中英

SignalR AzureFunction 客户端到 AspNetCore WebApi Hub 连接

[英]SignalR AzureFunction client to AspNetCore WebApi Hub connection

我有一个 webapi (aspnet core 2.2) 应用程序,它调用 azure function 依次启动signalR连接和加载数据。

直到今天它工作得很好,显然现在似乎已经发生了一些变化(大概是 signalR 客户端/服务器 package 更新),除了以下例外......

执行“执行”(失败,Id=e2e2a0f8-f56d-4fe1-a445-598b9338cb92)[06/11/2019 10:40:32] System.Private.CoreLib:执行 function 时出现异常:执行。 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);
    }
}

...

现在是客户端代码(在 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();

Package 版本:在服务器上... - Microsoft.AspNetCore.Signalr 1.1.0

在 Azure function 客户端... - Micorsoft.AspNetCore.Signalr.Client 3.0.0

...

I generally use Newtonsoft.Json for my Json needs but this new System.Text.Json does appear to be gaining traction and I'm not sure if this is some sort of versioning issue but adding the nuget reference to System.Text.Json on两端对这个问题没有任何影响。

更新

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

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

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

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

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

但无论哪种方式...... SignalR 仍然没有在这里打球。

有没有人有一个工作示例,它同时具有 a.Net Core 和基于 web 的客户端与 a.Net Core 集线器交谈,所有这些都在.Net Core 2.x 或.Net Core 3.x 下运行,因为我似乎找不到所有这些都可以在任何地方工作吗?

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

最终结果是,我在整个解决方案中对我的 nuget 缓存和我的 bin 文件夹进行了全面手动清理,这一切都变得生动起来。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM