我可以 运行 SignalR hub 通过 Azure API 管理吗?

Can I run SignalR hub through Azure API Management?

我有与 this guy 相同的问题:我可以通过 Azure API 管理服务 运行 我的 SignalR 中心吗?

我似乎无法在服务中配置它:它只允许我转发 HTTP/HTTPS 流量。这与论坛 post 中的人的回答相符。 我跟随 link 进入了 Microsoft 论坛,但问题似乎并没有在那里跟进。由于响应来自 2014 年,我想 - 也许现在是可能的。

Azure API 管理目前不支持 websocket。请随时提出功能请求:http://feedback.azure.com/forums/248703-api-management/filters/new

视情况而定,不支持 websockets,但如果您使用 azure signalr 资源,则仅支持协商请求;这是您的集线器的基本 post,必须通过您的 APIM,其余的 coms(websocket 请求)将直接使用 azure signalr 资源。

据我们所知,Azure API 管理 still doesn't support WebSockets

Dec 6, 2016:
Rest assured we still have this request in mind and are continually reviewing it. Please keep your feedback coming!

如果您使用的是 Azure SignalR Service,那么您可以按照@lazizanie 描述的方式进行操作,因为您的 SignalR 服务应该只提供协商端点:

假设您在 ASP.NET Core 3.1

中有一个名为 myHub 的集线器
app.UseEndpoints(endpoints => endpoints.MapHub<Hub>("/myHub"));

然后在 API 管理 URL=POST /myHub/negotiate 中添加操作 negotiateVersion 查询参数

或使用JSON编辑器并将其添加到paths

"/myHub/negotiate": {
    "post": {
        "summary": "SignalR negotiate ",
        "operationId": "signalr-negotiate",
        "parameters": [{
            "name": "negotiateVersion",
            "in": "query",
            "schema": {
                "type": ""
            }
        }],
        "responses": {
            "200": {
                "description": null
            }
        }
    }
}

对于您的 SignalR 服务的支持集主机,例如 https://myHubSignalR.westeurope.cloudapp.azure.com