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
イベントでは ConnectEventResponse
と EventErrorResponse
が考慮され、ユーザー イベントでは UserEventResponse
と EventErrorResponse
が考慮されます。現在のシナリオと一致しない残りの型は無視されます。
[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
に解析されます。
注
この言語の完全なサンプルは保留中です。
注
Java 用 Web PubSub 拡張機能はまだサポートされていません。
構成
次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。
function.json のプロパティ | 属性のプロパティ | 説明 |
---|---|---|
タイプ | 該当なし | 必須 - webPubSubTrigger に設定する必要があります。 |
方向 | 該当なし | 必須 - in に設定する必要があります。 |
名前 | 該当なし | 必須 - イベント データを受信するパラメーターの、関数コードで使われている変数名。 |
ハブ | ハブ | 必須 - この値は、トリガーされる関数の Web PubSub ハブの名前に設定する必要があります。 高い優先順位として属性への値の設定をサポートしていますが、またはグローバル値としてアプリ設定に設定することもできます。 |
イベントタイプ | WebPubSubEventType | 必須 - この値は、トリガーされる関数のメッセージのイベントの種類として設定する必要があります。 値は、user または system である必要があります。 |
eventName | イベント名 | 必須 - この値は、トリガーされる関数のメッセージのイベントとして設定する必要があります。
system イベントの種類の場合、イベント名は connect 、connected 、disconnected にする必要があります。
ユーザー定義サブプロトコルの場合、イベント名は 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 のような弱く型指定された言語では、name
のfunction.json
を使用して、次のマッピング テーブルに関するトリガー オブジェクトをバインドします。 さらに、トリガー入力のバインディング オブジェクトとして dataType
が function.json
に設定されている場合に、name
の data
が考慮され、それに応じてメッセージが変換されます。 すべてのパラメーターは context.bindingData.<BindingName>
から読み取ることができ、JObject
変換されます。
バインディング名 | バインドの種類 | 説明 | プロパティ |
---|---|---|---|
リクエスト | WebPubSubEventRequest |
アップストリーム要求を記述します | プロパティは、派生クラスの ConnectEventRequest 、 MqttConnectEventRequest 、 ConnectedEventRequest 、 MqttConnectedEventRequest 、 UserEventRequest 、 DisconnectedEventRequest 、 MqttDisconnectedEventRequest など、さまざまなイベントの種類によって異なります。 |
接続コンテキスト | WebPubSubConnectionContext |
一般的な要求情報 | EventType、EventName、Hub、ConnectionId、UserId、Headers、Origin、Signature、States |
データ |
BinaryData 、string 、Stream 、byte[] |
ユーザー message イベントでのクライアントからの要求メッセージ データ |
- |
データタイプ | WebPubSubDataType |
要求メッセージのデータ型。binary 、text 、json がサポートされています |
- |
主張 | 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 |
戻り値が不明な場合に使用される、サポートされている基本の応答の種類 | - |