Я нашел отдельный способ обойти эту проблему, используя свойство UserId объекта SignalRConnectionInfo. Я передаю идентификатор устройства, для которого я хочу получать сообщения, в вызове «переговоры», используя поле настраиваемого заголовка, которое возвращает токен для этого идентификатора. Затем я устанавливаю это значение в объекте SignalRMessage при получении сообщения из концентратора событий. Таким образом, страница устройства, на которой я нахожусь, только получает сообщение, которое отправляет это конкретное устройство.
[FunctionName("negotiate")]
public static SignalRConnectionInfo GetSignalRInfo(
[HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req,
[SignalRConnectionInfo(HubName = "deviceMessages", UserId = "{headers.deviceId}")] SignalRConnectionInfo connectionInfo)
{
return connectionInfo;
}
[FunctionName("messages")]
public static Task SendMessage(
[EventHubTrigger("{EventHubName}", Connection = "EventHubConnectionAppSetting")]string myEventHubMessage,
[SignalR(HubName = "deviceMessages")] IAsyncCollector<SignalRMessage> signalRMessages)
{
var dev = JToken.Parse(Convert.ToString(myEventHubMessage));
DeviceMessage msg = dev.ToObject<DeviceMessage>();
return signalRMessages.AddAsync(
new SignalRMessage
{
UserId = msg.deviceId,
Target = "newMessage",
Arguments = new[] { myEventHubMessage }
});
}