4

SignalR がこれを達成する方法と同様に、JavaScript が実行時にサーバー側のメソッドを呼び出す方法を誰かが知っているかどうかを確認しています。その理由は、適切なメソッドを呼び出すことになる switch ステートメントを削除するために、この同じタイプのアーキテクチャをコードに採用したいからです。

したがって、基本的には Execute という C# WebMethod があり、文字列パラメーターを受け取り、スイッチを介して適切なメソッドを選択します。

public void Execute(string Method)
{
    switch (Method)
    {
        case "doThis":
           doThis();
        break;
    }

}

JavaScript から C# メソッドを動的に呼び出す同様のスタイルがあれば、適切なメソッドが呼び出されます。何か案は?

また、「ソースを見てください」と言うだけでなく、誰かが深く掘り下げてくれることを願っています。

4

3 に答える 3

1

Drew Marsh は、SignalR が C# ハブ メソッドを呼び出すためにラムダ式を構築およびコンパイルするという点で正しいですが、それはおそらく必要以上に複雑です。本当に必要なのは、次の行に沿った単純なリフレクションだけです。

public void Execute(string Method)
{
    GetType().GetMethod(Method).Invoke(this, new object[]{});
}

SignalR は、コンパイルされたラムダ式を使用してパフォーマンスを向上させますが、シナリオでは必要ない場合があります。

式のコンパイル用のコードは、ASP.NET MVC と呼ばれる場所に既に記述されていActionMethodDispatcherましたが、v1.1.0 まで SignalR に追加されませんでした。MethodInfo.Invokeでの式のコンパイルを使用した基本的なハブ呼び出しの全体的なパフォーマンスの向上は、約 1% しか見られませんでした。プロファイリングでは、SignalR ハブ メソッドの呼び出しに費やされた時間のほとんどが、JSON のシリアル化/逆シリアル化に費やされていることが示されました。

于 2013-06-18T18:36:10.237 に答える