メインコンテンツまでスキップ

StreamingHub フィルター

備考

この機能とドキュメントはサーバーサイドのみに適用されます。

StreamingHub にもフィルターを適用できますがフィルターの種類と挙動に注意が必要です。このページでは StreamingHub でのフィルターの基本的な使い方と注意点について説明します。

Unary サービス向けのフィルターを使う

Unary サービス向けに実装したフィルター MagicOnionFilter を StreamingHub に適用できます。ただし StreamingHub に適用した場合にフィルターが実行されるのは接続時 (Connect) のみです。接続後の Hub メソッド呼び出し時にはフィルターは実行されません。そのため適用できるのはクラスまたはグローバルのみです。

これは StreamingHub の接続状況メトリクスや認証、といったものを取り扱う場合には適していますが、Hub メソッドごとにフックしたいといった場合には次に説明する StreamingHub フィルターを使用してください。

ヒント

Unary 向けのフィルターをグローバルフィルターに設定した場合、StreamingHub にも適用されることに注意が必要です。例えばメソッドの実行時間の計測などを行う場合 StreamingHub によって意図せず Connect が記録される、といったことが起こりえます。

StreamingHub フィルターを使う

StreamingHub フィルターは Hub メソッドの呼び出し前後にフックするフィルターです。Unary サービスのフィルターとほぼ同じですが MagicOnionFilterAttribute の代わりに StreamingHubFilterAttribute を継承して Invoke メソッドを実装します。

class StreamingHubFilterAttribute : StreamingHubFilterAttribute
{
public override async ValueTask Invoke(StreamingHubContext context, Func<StreamingHubContext, ValueTask> next)
{
// before invoke
try
{
await next(context);
}
finally
{
// after invoke
}
}
}

StreamingHub フィルターは Hub メソッドの呼び出し単位で実行されるため、エラーハンドリングやロギング、メソッドの計測などに適しています。

StreamingHub フィルターも通常のフィルターと同様に拡張用のインターフェースが用意されているため、柔軟なフィルター実装が可能です。詳しくは フィルターの拡張性 を参照してください。