Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure SignalR Hizmeti kullanarak bir veya daha fazla ileti göndermek için SignalR çıkış bağlamasını kullanın. İletiyi şu şekilde yayımlayabilirsiniz:
- Tüm bağlı istemciler
- Belirtilen gruptaki bağlı istemciler
- Belirli bir kullanıcı için kimliği doğrulanmış bağlı istemciler
Çıkış bağlaması, gruba istemci veya kullanıcı ekleme, bir istemciyi veya kullanıcıyı gruptan kaldırma gibi grupları yönetmenize de olanak tanır.
Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.
Örnek
Tüm istemcilere yayın
Aşağıdaki C# modlarından birini kullanarak bir C# işlevi oluşturabilirsiniz:
- Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. .NET ve .NET Framework için uzun vadeli destek (LTS) ve LTS olmayan sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış bir çalışan işlemi gereklidir.
- İşlem içi model: Azure İşlevleri çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi.
- C# betiği: Öncelikle Azure portalında C# işlevleri oluşturduğunuzda kullanılır.
Önemli
İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.
Aşağıdaki örnekte, tüm bağlı istemcilere çıkış bağlamasını kullanarak ileti gönderen bir işlev gösterilmektedir. newMessage, her istemcide çağrılacak yöntemin adıdır.
[Function(nameof(BroadcastToAll))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction BroadcastToAll([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
// broadcast to all the connected clients without specifying any connection, user or group.
Arguments = new[] { bodyReader.ReadToEnd() },
};
}
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
// You can use any other trigger type instead.
app.http('broadcast', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body]
});
}
});
Tam PowerShell örnekleri beklemede.
Python kodu şu şekildedir:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
Kullanıcıya gönderme
SignalR iletisinde kullanıcı kimliğini ayarlayarak yalnızca bir kullanıcıya kimliği doğrulanmış bağlantılara ileti gönderebilirsiniz.
[Function(nameof(SendToUser))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction SendToUser([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
Arguments = new[] { bodyReader.ReadToEnd() },
UserId = "userToSend",
};
}
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
Tam PowerShell örnekleri beklemede.
Python kodu şu şekildedir:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
#message will only be sent to this user ID
'userId': 'userId1',
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.userId = "userId1";
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.http('sendToUser', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body],
"userId": "userId1",
});
}
});
Gruba gönderme
SignalR iletisindeki grup adını ayarlayarak yalnızca gruba eklenmiş bağlantılara ileti gönderebilirsiniz.
[Function(nameof(SendToGroup))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRMessageAction SendToGroup([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
using var bodyReader = new StreamReader(req.Body);
return new SignalRMessageAction("newMessage")
{
Arguments = new[] { bodyReader.ReadToEnd() },
GroupName = "groupToSend"
};
}
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
app.http('sendToGroup', {
methods: ['GET'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"target": "newMessage",
"arguments": [request.body],
"groupName": "myGroup",
});
}
});
Tam PowerShell örnekleri beklemede.
Python kodu şu şekildedir:
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
message = req.get_json()
signalROutput.set(json.dumps({
#message will only be sent to this group
'groupName': 'myGroup',
'target': 'newMessage',
'arguments': [ message ]
}))
@FunctionName("sendMessage")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRMessage sendMessage(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req) {
SignalRMessage message = new SignalRMessage();
message.groupName = "myGroup";
message.target = "newMessage";
message.arguments.add(req.getBody());
return message;
}
Grup yönetimi
SignalR Hizmeti, kullanıcıların veya bağlantıların gruplara eklenmesine izin verir. Daha sonra iletiler bir gruba gönderilebilir. Grupları yönetmek için çıkış bağlamasını SignalR kullanabilirsiniz.
Üye eklemek veya kaldırmak için belirtin SignalRGroupActionType . Aşağıdaki örnek, bir kullanıcıyı gruptan kaldırır.
[Function(nameof(RemoveFromGroup))]
[SignalROutput(HubName = "chat", ConnectionStringSetting = "SignalRConnection")]
public static SignalRGroupAction RemoveFromGroup([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
return new SignalRGroupAction(SignalRGroupActionType.Remove)
{
GroupName = "group1",
UserId = "user1"
};
}
Not
Doğru bağlamayı ClaimsPrincipal elde etmek için Azure İşlevleri'de kimlik doğrulama ayarlarını yapılandırmış olmanız gerekir.
function.json dosyasındaki bağlama verileri aşağıdadır:
Örnek function.json:
{
"type": "signalR",
"name": "signalROutput",
"hubName": "hubName1",
"connectionStringSetting": "<name of setting containing SignalR Service connection string>",
"direction": "out"
}
const { app, output } = require('@azure/functions');
const signalR = output.generic({
type: 'signalR',
name: 'signalR',
hubName: 'hub',
connectionStringSetting: 'AzureSignalRConnectionString',
});
// The following function adds a user to a group
app.http('addUserToGroup', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"userId": req.query.userId,
"groupName": "myGroup",
"action": "add"
});
}
});
// The following function removes a user from a group
app.http('removeUserFromGroup', {
methods: ['POST'],
authLevel: 'anonymous',
extraOutputs: [signalR],
handler: (request, context) => {
context.extraOutputs.set(signalR, {
"userId": req.query.userId,
"groupName": "myGroup",
"action": "remove"
});
}
});
Tam PowerShell örnekleri beklemede.
Aşağıdaki örnek bir gruba kullanıcı ekler.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'add'
}))
Aşağıdaki örnek, bir kullanıcıyı gruptan kaldırır.
def main(req: func.HttpRequest, signalROutput: func.Out[str]) -> func.HttpResponse:
signalROutput.set(json.dumps({
'userId': 'userId1',
'groupName': 'myGroup',
'action': 'remove'
}))
Aşağıdaki örnek bir gruba kullanıcı ekler.
@FunctionName("addToGroup")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRGroupAction addToGroup(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req,
@BindingName("userId") String userId) {
SignalRGroupAction groupAction = new SignalRGroupAction();
groupAction.action = "add";
groupAction.userId = userId;
groupAction.groupName = "myGroup";
return action;
}
Aşağıdaki örnek, bir kullanıcıyı gruptan kaldırır.
@FunctionName("removeFromGroup")
@SignalROutput(name = "$return", HubName = "hubName1")
public SignalRGroupAction removeFromGroup(
@HttpTrigger(
name = "req",
methods = { HttpMethod.POST },
authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Object> req,
@BindingName("userId") String userId) {
SignalRGroupAction groupAction = new SignalRGroupAction();
groupAction.action = "remove";
groupAction.userId = userId;
groupAction.groupName = "myGroup";
return action;
}
Özellikler
hem işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları işlevi tanımlamak için özniteliğini kullanır. C# betiği bunun yerine bir function.json yapılandırma dosyası kullanır.
Aşağıdaki tabloda özniteliğin SignalROutput özellikleri açıklanmaktadır.
| Öznitelik özelliği | Açıklama |
|---|---|
| HubName | Bu değer, bağlantı bilgilerinin oluşturulduğu SignalR hub'ının adına ayarlanmalıdır. |
| ConnectionStringSetting | varsayılan AzureSignalRConnectionStringolarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının veya ayarlar koleksiyonunun adı. |
Ek Açıklamalar
Aşağıdaki tabloda ek açıklama için SignalROutput desteklenen ayarlar açıklanmaktadır.
| Ayar | Açıklama |
|---|---|
| ad | Bağlantı bilgileri nesnesi için işlev kodunda kullanılan değişken adı. |
| hubName | Bu değer, bağlantı bilgilerinin oluşturulduğu SignalR hub'ının adına ayarlanmalıdır. |
| connectionStringSetting | varsayılan AzureSignalRConnectionStringolarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının veya ayarlar koleksiyonunun adı. |
Yapılandırma
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
| function.json özelliği | Açıklama |
|---|---|
| türü | olarak ayarlanmalıdır signalR. |
| yön | olarak ayarlanmalıdır out. |
| ad | Bağlantı bilgileri nesnesi için işlev kodunda kullanılan değişken adı. |
| hubName | Bu değer, bağlantı bilgilerinin oluşturulduğu SignalR hub'ının adına ayarlanmalıdır. |
| connectionStringSetting | varsayılan AzureSignalRConnectionStringolarak olarak SignalR Hizmeti bağlantı dizesi içeren uygulama ayarının veya ayarlar koleksiyonunun adı. |
Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasınaValues ekleyin.
Kullanım
En iyi güvenlik için, işlev uygulamanız paylaşılan gizli dizi anahtarı içeren bir bağlantı dizesi kullanmak yerine Azure SignalR hizmetine bağlanırken yönetilen kimlikleri kullanmalıdır. Daha fazla bilgi için bkz. Microsoft Entra tarafından yönetilen kimliklerle kaynakları Azure SignalR Hizmeti istekleri yetkilendirme.