次の方法で共有


Azure Functions の Azure Web PubSub トリガー バインド

Azure Web PubSub トリガーを使用して、Azure Web PubSub サービスからのクライアント イベントを処理します。

トリガー エンドポイント パターンは次のようになります。これは Web PubSub サービス側で設定する必要があります (ポータル: settings -> イベント ハンドラー -> URL テンプレート)。 エンドポイント パターンでは、code=<API_KEY>上の理由で、Azure 関数アプリを使用している場合は、クエリ部分 必須です。 このキーは Azure portal で確認できます。 関数アプリを Azure にデプロイした後に、関数アプリ リソースを見つけて、[関数] ->[アプリ キー] ->[システム キー] ->[webpubsub_extension] の順に移動します。 ただし、ローカル関数を使用する場合、このキーは必要ありません。

<Function_App_Url>/runtime/webhooks/webpubsub?code=<API_KEY>

関数のシステム キーを取得するスクリーンショット。

次の例は、クライアントからのユーザー イベントを処理する方法を示しています。

[Function("Broadcast")]
public static void Run(
[WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request, ILogger log)
{
    log.LogInformation($"Request from: {request.ConnectionContext.UserId}");
    log.LogInformation($"Request message data: {request.Data}");
    log.LogInformation($"Request message dataType: {request.DataType}");
}

WebPubSubTrigger バインドでは、同期シナリオの戻り値もサポートされています。たとえば、サーバーがクライアント要求を確認して拒否できる場合や、呼び出し元に直接メッセージを送信できる場合の、システム Connect イベントやユーザー イベントなどです。 Connect イベントでは ConnectEventResponseEventErrorResponse が考慮され、ユーザー イベントでは UserEventResponseEventErrorResponse が考慮されます。現在のシナリオと一致しない残りの型は無視されます。

[Function("Broadcast")]
public static UserEventResponse Run(
[WebPubSubTrigger("<hub>", WebPubSubEventType.User, "message")] UserEventRequest request)
{
    return new UserEventResponse("[SYSTEM ACK] Received.");
}
const { app, trigger } = require('@azure/functions');

const wpsTrigger = trigger.generic({
    type: 'webPubSubTrigger',
    name: 'request',
    hub: '<hub>',
    eventName: 'message',
    eventType: 'user'
});

app.generic('message', {
    trigger: wpsTrigger,
    handler: async (request, context) => {
        context.log('Request from: ', request.connectionContext.userId);
        context.log('Request message data: ', request.data);
        context.log('Request message dataType: ', request.dataType);
    }
});

WebPubSubTrigger バインドでは、同期シナリオの戻り値もサポートされています。たとえば、サーバーがクライアント要求を確認して拒否できる場合や、要求クライアントに直接メッセージを送信できる場合の、システム Connect イベントやユーザー イベントなどです。 厳密に型指定されていない JavaScript 言語では、オブジェクト キーに関して逆シリアル化されます。 また、 EventErrorResponse は、rest オブジェクトと比較して最も優先度が高く、 code が戻り値にある場合は、 EventErrorResponseに解析されます。

app.generic('message', {
    trigger: wpsTrigger,
    handler: async (request, context) => {
          return {
              "data": "ack",
              "dataType" : "text"
          };
    }
});

この言語の完全なサンプルは保留中です。

Java 用 Web PubSub 拡張機能はまだサポートされていません。

構成

次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。

function.json のプロパティ 属性のプロパティ 説明
タイプ 該当なし 必須 - webPubSubTrigger に設定する必要があります。
方向 該当なし 必須 - in に設定する必要があります。
名前 該当なし 必須 - イベント データを受信するパラメーターの、関数コードで使われている変数名。
ハブ ハブ 必須 - この値は、トリガーされる関数の Web PubSub ハブの名前に設定する必要があります。 高い優先順位として属性への値の設定をサポートしていますが、またはグローバル値としてアプリ設定に設定することもできます。
イベントタイプ WebPubSubEventType 必須 - この値は、トリガーされる関数のメッセージのイベントの種類として設定する必要があります。 値は、user または system である必要があります。
eventName イベント名 必須 - この値は、トリガーされる関数のメッセージのイベントとして設定する必要があります。

system イベントの種類の場合、イベント名は connectconnecteddisconnectedにする必要があります。

ユーザー定義サブプロトコルの場合、イベント名はmessage

システムでサポートされているサブプロトコル json.webpubsub.azure.v1.の場合、イベント名はユーザー定義のイベント名です。
clientProtocols ClientProtocols 省略可能 - Web PubSub トリガー関数をトリガーできるクライアント プロトコルを指定します。

大文字と小文字を区別しない値は有効です。
all: すべてのクライアント プロトコルを受け入れます。 既定値です。
webPubSub: Web PubSub プロトコルのみを受け入れます。
mqtt: MQTT プロトコルのみを受け入れます。
接続 つながり 省略可能 - アップストリームの Azure Web PubSub サービスを指定するアプリ設定または設定コレクションの名前。 値は署名の検証に使用されます。 また、この値は既定で WebPubSubConnectionString アプリ設定で自動的に解決されます。 nullは、検証が必要ではなく、常に成功したことを意味します。

重要

最適なセキュリティを確保するために、関数アプリでは、共有シークレット キーを含む接続文字列を使用する代わりに、Web PubSub サービスに接続するときにマネージド ID を使用する必要があります。 詳細については、「 Microsoft Entra ID を使用してマネージド ID 要求を認証するを参照してください。

使用法

C# で WebPubSubEventRequest は、型が認識されたバインディング パラメーターであり、残りのパラメーターはパラメーター名によってバインドされます。 使用可能なパラメーターと型については、次の表を参照してください。

JavaScript のような弱く型指定された言語では、namefunction.jsonを使用して、次のマッピング テーブルに関するトリガー オブジェクトをバインドします。 さらに、トリガー入力のバインディング オブジェクトとして dataTypefunction.json に設定されている場合に、namedata が考慮され、それに応じてメッセージが変換されます。 すべてのパラメーターは context.bindingData.<BindingName> から読み取ることができ、JObject 変換されます。

バインディング名 バインドの種類 説明 プロパティ
リクエスト WebPubSubEventRequest アップストリーム要求を記述します プロパティは、派生クラスの ConnectEventRequestMqttConnectEventRequestConnectedEventRequestMqttConnectedEventRequestUserEventRequestDisconnectedEventRequestMqttDisconnectedEventRequestなど、さまざまなイベントの種類によって異なります。
接続コンテキスト WebPubSubConnectionContext 一般的な要求情報 EventType、EventName、Hub、ConnectionId、UserId、Headers、Origin、Signature、States
データ BinaryDatastringStreambyte[] ユーザー message イベントでのクライアントからの要求メッセージ データ -
データタイプ WebPubSubDataType 要求メッセージのデータ型。binarytextjson がサポートされています -
主張 IDictionary<string, string[]> システム connect 要求でのユーザー要求 -
問い合わせ IDictionary<string, string[]> システム connect 要求でのユーザー クエリ -
サブプロトコル IList<string> システム connect 要求での使用可能なサブプロトコル -
クライアント証明書 IList<ClientCertificate> システム connect 要求でのクライアントからの証明書の拇印のリスト -
理由 string システム disconnected 要求での理由 -

重要

C# では、関数バインドを正しく行うために、複数の型がサポートされるパラメータを最初 (つまり、既定値の 型以外の request または data) に入れるBinaryData

応答を返す

WebPubSubTrigger では、connect の同期イベントおよびユーザー イベントに対して、顧客が返した応答が考慮されます。 一致した応答だけがサービスに送り返されます。それ以外の場合は無視されます。 さらに、WebPubSubTrigger 戻りオブジェクトでは、接続のメタデータを管理するために、ユーザによる SetState()ClearStates() がサポートされます。 また、拡張機能により、戻り値の結果が要求の WebPubSubConnectionContext.States の元の値とマージされます。 既存のキーの値が上書きされ、新しいキーの値が追加されます。

返り値の種類 説明 プロパティ
ConnectEventResponse connect イベントの応答 Groups、Roles、UserId、Subprotocol
UserEventResponse ユーザー イベントの応答 DataType、Data
EventErrorResponse 同期イベントのエラー応答 Code、ErrorMessage
*WebPubSubEventResponse 戻り値が不明な場合に使用される、サポートされている基本の応答の種類 -