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



我有一个webapi(aspnet core 2.2(应用程序,它调用一个azure函数,该函数依次启动一个signalR连接,并将大量数据填充到套接字中,然后关闭。

直到今天,它还运行得很好,显然现在有些东西似乎发生了变化(可能是signalR客户端/服务器包更新(,除了以下例外,它打破了这一点。。。

执行的"执行"(失败,Id=e2e2a0f8-f56d-4fe1-a445-598b9338cb92([06/11/2019 10:40:32]System.Private.CoreLib:异常executing函数:执行。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.ReadOnlyPan`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");
});
}

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函数中(。。。

函数.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.Signal.Client 3.0.0

我通常使用Newtonsoft.Json来满足Json的需求,但这个新的System.Text.Json似乎越来越受欢迎,我不确定这是否是某种版本控制问题,但在两端添加对System.Text.J的nuget引用对这个问题没有影响。

更新

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

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

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

已执行"执行"(失败,Id=e2265bbb-e59b-4b51-a0dd-d5798adccac1([11/11/2019 12:50:46]System.Private.CoreLib:执行函数时发生异常:Execute。wf:无法加载文件或程序集"netstandard,Version=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文件夹进行了全面的手动清理,一切都变得生动起来。

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

最新更新