Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
signarc#如何调用方法_C#_Javascript_Signalr - Fatal编程技术网

signarc#如何调用方法

signarc#如何调用方法,c#,javascript,signalr,C#,Javascript,Signalr,我想看看是否有人知道javascript是如何在运行时调用服务器端方法的,类似于Signal是如何实现这一点的。原因是,我希望在代码中采用相同类型的体系结构,以删除最终调用适当方法的switch语句 基本上现在我有一个叫做Execute的C#WebMethod,它接受一个字符串参数,然后通过一个开关选择合适的方法 public void Execute(string Method) { switch (Method) { case "doThis":

我想看看是否有人知道javascript是如何在运行时调用服务器端方法的,类似于Signal是如何实现这一点的。原因是,我希望在代码中采用相同类型的体系结构,以删除最终调用适当方法的switch语句

基本上现在我有一个叫做Execute的C#WebMethod,它接受一个字符串参数,然后通过一个开关选择合适的方法

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端的工作原理,我更感兴趣的是服务器端在接收到此消息时发生了什么。你能详细介绍一下“反射”和“动态”部分吗?