signarc#如何调用方法
我想看看是否有人知道javascript是如何在运行时调用服务器端方法的,类似于Signal是如何实现这一点的。原因是,我希望在代码中采用相同类型的体系结构,以删除最终调用适当方法的switch语句 基本上现在我有一个叫做Execute的C#WebMethod,它接受一个字符串参数,然后通过一个开关选择合适的方法signarc#如何调用方法,c#,javascript,signalr,C#,Javascript,Signalr,我想看看是否有人知道javascript是如何在运行时调用服务器端方法的,类似于Signal是如何实现这一点的。原因是,我希望在代码中采用相同类型的体系结构,以删除最终调用适当方法的switch语句 基本上现在我有一个叫做Execute的C#WebMethod,它接受一个字符串参数,然后通过一个开关选择合适的方法 public void Execute(string Method) { switch (Method) { case "doThis":
public void Execute(string Method)
{
switch (Method)
{
case "doThis":
doThis();
break;
}
}
如果有一种类似的风格,可以从javascript动态调用我的C#方法,然后调用正确的方法,那就太好了。有什么想法吗
我也希望有人能深入研究,而不仅仅是说“看看来源”
signarc#如何调用方法
取决于协议,但假设您的浏览器(和服务器)支持webSocket协议:
您(通过javascript)发送一条消息:
var socket=newwebsocket(“ws://…”)代码>//此处所需的服务器端函数令牌为参数(+params)
服务器可以(fw4.5)处理此消息,并通过反射
,动态
——调用该方法
但是,它异步执行一个catch(按设计):
因此,此代码将不起作用:
var a=1;
var b=2;
var c=myHBub.server.add(a,b);
alert(c) // undefined.
而这个可以用
var a=1;
var b=2;
myHBub.server.add(a,b).done(function (result){alert(result);});
至于它发生在哪里,如何发生
我执行了一个名为“Join”的Js客户端方法:
以下是核心执行者:
代码是完全开源的,你为什么不去看看呢?具体来说,你会想开始寻找信息的来源,并一路跟踪你,最终你会进入魔法发生的地方
最终,您的问题的答案是,它构建一个lambda表达式,使用来调用该方法,并通过调用将其编译为类型为HubMethodExecutor(IHub,object[])
的强类型委托。Drew Marsh说得对,SignalR构建并编译一个lambda表达式来调用C#hub方法,但这可能比必要的更复杂。您真正需要的只是沿着以下思路进行简单的思考:
public void Execute(string Method)
{
GetType().GetMethod(Method).Invoke(this, new object[]{});
}
SignalR使用编译后的lambda表达式来获得更好的性能,但对于您的场景来说,这可能不是必需的
表达式编译的代码已经为ASP.NET MVC编写,在ASP.NET MVC中称为ActionMethodDispatcher
,但直到v1.1.0才添加到SignalR中。我只看到使用表达式编译的基本集线器调用的总体性能提高了约1%。分析表明,调用SignalR hub方法的大部分时间都花在JSON序列化/反序列化上。我了解javascript端的工作原理,我更感兴趣的是服务器端在接收到此消息时发生了什么。你能详细介绍一下“反射”和“动态”部分吗?