我在一个应用程序中使用SingalR,该应用程序在短时间内发送了大量消息.假设我有客户端A和客户端B.客户端A只发送消息而客户端B只是收听消息.客户端A按以下顺序发送以下消息:A-> B-> C-> D.
我所看到的是,客户端B有时会以不同的顺序接收消息,例如:B-> A-> C-> D
保持发送消息的顺序非常重要.我在网上看了一下,我发现有人说我应该在处理这些消息的集线器上的函数上使用async-await.
public async Task hubMethod(msgObject msg)
{
await Clients.All.message(msg);
}
Run Code Online (Sandbox Code Playgroud)
我不确定这有多大帮助,因为每次我从客户端A拨打电话时,singalR都应该创建一个新的集线器实例.它唯一能做的就是等待singalR完成它在服务器上所做的一切,以便将消息发送到另一个客户端并通知客户端A.
所以我的问题是 - 有一个singalR或asp.net机制,确保我在另一个客户端上以正确的顺序接收消息,或者我是否需要编写我自己的机制(服务器或客户端)重新排序消息,如果他们是乱序 - 如果是的话,有没有一个库已经做到了?
我创建了以下类.一个基类IObject和2个派生类A和B.
[KnownType(typeof(B))]
[KnownType(typeof(A))]
[DataContract(Name = "IObject")]
public class IObject
{
}
[DataContract(Name="A")]
public class A : IObject
{
[DataMember]
public string s1 { get; set; } // Tag Name as it will be presented to the user
}
[DataContract(Name="B")]
public class B : IObject
{
[DataMember]
public string s2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我还创建了以下服务:
[ServiceKnownType(typeof(B))]
[ServiceKnownType(typeof(A))]
public void GetR(IObject obj)
{
B other = (B)obj;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是得到一个A或B的实例,但我不知道我将得到哪一个,所以我希望得到一个IObject,然后将其转换为A或B,如我所放置的示例所示.
当我发送包含s2字符串的json字符串时会发生什么,我得到IObject实例而不是B实例.代码有什么问题?
我正在使用的客户端示例:
var url = serviceURL;
var data = {s2: "Data"};
var …
Run Code Online (Sandbox Code Playgroud) 我在VS 2017上创建了一个新项目.我正在使用webpack捆绑JS文件.我的webpack.config.js文件是 -
module.exports = {
entry: "./app.js", // bundle's entry point
output: {
path: __dirname + "/dist", // output directory
filename: "index_bundle.js" // name of the generated bundle
},
devtool: "source-map"
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试从visual studio调试chrome.如果我在index_bundle.js文件上放置一个断点 - 它运行良好,它在断点处停止,它甚至将它映射到正确的文件.该问题时,我尝试把一个破发点上的原始JS文件出现.例如app.js - 它会尝试将断点放在bootstrap 14248a9c8b87e0f9032f文件中 - 这是错误的文件.我认为VS在阅读地图文件时遇到了问题.这是我创建的地图文件:
{
"version": 3,
"sources": [ "webpack:///webpack/bootstrap 14248a9c8b87e0f9032f", "webpack:///./funcs.js", "webpack:///./app.js" ],
"names": [],
}
Run Code Online (Sandbox Code Playgroud)
好像它试图将断点放在原始文件上按下的相对行上的bootstrap文件中.(例如,如果我要使用app.js条目交换地图文件上的引导条目 - 它似乎将断点放在正确的位置) (顺便说一句,我没有把所有的地图文件内容 - 它是太长了,没有把map,sourceContent,file和sourceRoot条目放到
javascript breakpoints source-maps webpack visual-studio-2017
c# ×2
asp.net ×1
breakpoints ×1
javascript ×1
json ×1
known-types ×1
real-time ×1
signalr ×1
source-maps ×1
wcf ×1
webpack ×1