Inr*_*ego 5 .net c# json json.net signalr
昨天我开始开发SignalR应用程序 - 我创建了2个不同的项目(服务器和客户端),一切顺利.
今天,我再次打开它 - 现在它引起了问题.
这是我的客户端代码:
signalrHub.client.updateVehicle = function (dbVehicle) {
$.each(Vehicles, function() {
var vehicle = this;
if (vehicle.id == dbVehicle.id && vehicle.dataset == dbVehicle.dataset) {
vehicle.move(dbVehicle.latitude, dbVehicle.longitude);
}
});
};
$.connection.hub.url = "http://localhost:52522/signalr";
signalrHub = $.connection.routeHub;
$.connection.hub.start().done(function() {
signalrHub.server.joinDataset("JR");
signalrHub.server.getVehicles("JR").done(function (response) {
$.each(response.vehicles, function() {
Vehicles.push(new Vehicle(this));
});
$.each(Vehicles, function() {
this.addToMap();
});
}).fail(function(error) {
alert(error);
});
});
Run Code Online (Sandbox Code Playgroud)
调用失败处理程序,出现以下错误:无法加载文件或程序集"Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我已经尝试将Newtonsoft.Json更新为6.0 - 但后来我找到了一个编译错误,寻找版本4.5.
这是服务器端的GetVehicles:
public async Task<Vehicles> GetVehicles(string dataset)
{
var vehicles = await Vehicles.GetData(dataset, DateTime.Today, DateTime.Today.AddDays(1));
Clients.Caller.updateVehicle(vehicles.Data.First());
return vehicles;
}
Run Code Online (Sandbox Code Playgroud)
这是它失败的地方:
Clients.Caller.updateVehicle(vehicles.Data.First());
Run Code Online (Sandbox Code Playgroud)
如果我删除它 - 该方法将一直执行到最后,客户端超时并且永远不会收到Vehicles对象.
另一个边缘情况,如果你使用signalr.exe ghp ...命令手动生成javascript文件(即用于单元测试等),你可以解决与web.config上面的答案类似的工作的问题.
只需signalr.exe.config在同一个地方创建一个常规的app.config文件(即),signalr.exe然后将以下内容放入其中:
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我在我的项目中收到了同样的错误消息。我的设置如下:
因此,在我通过 NuGet 将“Web”项目更新为 Newtonsoft.Json 6.0.1 后,错误消失了。也许您在引用不同版本的 Newtonsoft 的不同项目中遇到了类似的问题?看来 .NET 4.5 现在确实是您的问题。您是否在项目属性中将 .NET Framework 4.5(或 4.5.1)设置为目标框架?