2

サーバー側のハブでこのメソッドの簡単なサンプルを入手しました。

    public int CanThrowException(int input)
    {
        if (0==input)
            throw new ArgumentOutOfRangeException("input", "was zero");
        return -input;
    }

クライアントでこれ:

$.connection.testHub.server.canThrowException(0).fail(function (x)
{
    console.log(x);
});

チェックするxと、パラメーター名とメッセージを含む文字列が得られます。

私が探しているのは、サーバー側の例外のプロパティをミラーリングする実際の Javascript オブジェクトを取得する方法です。したがって、特定のケースでは、プロパティmessageactualValueおよびが必要ParamNameです。

なぜ私はこれが欲しいのですか?通常はオブジェクトを返すサーバー側コードを書きたいのですが、場合によっては、エラーに関する詳細情報を含む例外をスローするため、シナリオでユーザーに表示することは絶対に理にかなっています (実際には、そうではありません)。理にかなっています、それは必要です)。

client.caller.OnErrorThisAndThat()もちろん、サーバー側で例外をキャッチすると、何らかのメソッドを呼び出すことができます。ただし、最後に呼び出したサーバー側メソッドの状態を保持し、そのコールバックにフックして、これら 2 つを接続する必要があるため、JavaScript コードがより複雑になります。

JavaScript クライアントで型付き例外プロキシを取得する方法はありますか? そうでない場合は、言及されたイベントソート混乱を除いて、それらなしで私が望むものを達成する方法はありますか?

4

1 に答える 1

4

エラーをスローする可能性のあるハブ メソッドの周りに try catch ステートメントを配置します。

サーバーがスローしたときにクライアントでメソッドを呼び出す:

public int CanThrowException(int input)
{
    try
    {
        if (0==input) {
            throw new ArgumentOutOfRangeException("input", "was zero");
        }
        return -input;
    }
    catch(Exception e)
    {
        Clients.Caller.ErrorOnServer(e);
    }
}

返されるエラー オブジェクト:

public object CanThrowException(int input)
{
    try
    {
        if (0==input) {
            throw new ArgumentOutOfRangeException("input", "was zero");
        }
        return -input;
    }
    catch(Exception e)
    {
        return e;
    }
}

これらのアプローチはどちらも、対応するプロパティを持つクライアント上のエラー オブジェクトを取得します。ただし、これが顧客向けのアプリケーションである場合は、この方法を使用しないことをお勧めします。例外を防ぐことができる場合、クライアントに例外を公開することは決して良いことではありません。

お役に立てれば!

于 2013-02-25T03:52:33.480 に答える