415 Azure功能上不受支持的媒体类型-> SignalR服务发布

时间:2019-04-12 14:39:29

标签: c# azure signalr azure-functions signalr-service

我正在尝试将消息从Azure函数发送到Azure SignalR服务,并返回415,但是我不确定如何确定问题的原因。

我已经为用户的应用程序前端提供了一个可行的实现,并且用户可以通过SignalR Service广播消息,但是现在我需要一个后端功能来在完成时通知用户。

我遵循的示例是这里的示例; https://github.com/Microsoft/MTC_WhackAMole.NET/blob/master/MoleDeploy.SignalR/AzureSignalR.cs

执行该函数时,它会成功完成SendAsync()函数,但实际上不会触发任何操作。

var payload = new PayloadMessage()
{
    Target = methodName,
    Arguments = args
};
var url = $"{endpoint}/api/v1/hubs/{hubName}";
var bearer = GenerateJwtBearer(null, url, null, DateTime.UtcNow.AddMinutes(30), accessKey);
await PostJsonAsync(url, payload, bearer);

只有在Postman中尝试相同的请求时,我才收到415错误。

在邮递员中,我要发布到以下网址;

https://xxxxxx.service.signalr.net/api/v1/hubs/{hubName}

使用承载身份验证令牌(据我所知,更改令牌会生成401,与415相对应)

它发送以下有效负载;

{"Target":"hubFunctionName","Arguments":"message to broadcast"}

我不确定是发布的正文。目标应该是集线器中的功能,参数应该是要发送的消息吗?

查看在PostJsonAsync()中发送的有效负载,它显示为;

payload {AzureFunctionName.AzureSignalR.PayloadMessage}
--Arguments {object[1]}
----[0] "message to broadcast"
--Target    "hubFunctionName"

集线器中的功能是最基本的;

public void Send(string messageText)
{
    Clients.All.broadcastMessage(messageText);
}

如果有人可以为此指出正确的方向,

谢谢, 汤姆

2 个答案:

答案 0 :(得分:0)

基于docs,我认为arguments必须是要发送的一组消息。您能确认要在Postman中进行相同的测试吗?

Azure Functions v2拥有一个Azure SignalR Service Output Binding,您可以直接使用它,而不是自己编写此代码。

答案 1 :(得分:0)

感谢您的回应-我仍在努力争取实现这一功能。

要扩展,我有一个从队列读取的基本Azure函数,我需要它才能将消息发送到我的Signalr服务。

读取队列很简单(并且可行)

public static void Run([QueueTrigger("signalr-messages", Connection = "Azure.Storage.Main")]string myQueueItem, ILogger log)
{
    <Deserialise>
    SendMessage(message, null);
}

我的SendMessage函数看起来像;

public static Task SendMessage(Message message, [SignalR(HubName = "baseHub")]IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
    new SignalRMessage
      {
        Target = "sendMessage",
        Arguments = new[] { message }
      });
}

我在SendMessage中传递了“ null”,但是我知道这是错误的-我可以找到的示例来自HTTP触发器而不是队列触发器

我什至会沿着正确的道路走吗?