ASP .NET Core 2.0, SignalR

7

我在 Windows AZURE 上托管了一个 ASP .NET Core 2.0 应用程序中的 SignalR 服务器:

public class Chat : Hub
{
    public Task Send(string message)
    {
        return Clients.All.InvokeAsync("Send", message);
    }
}

我也在JavaScript中有客户端:
<script src="scripts/signalr-client.min.js"></script>
connection.on('send', data => {
    console.log(data);
});

connection.start()
          .then(() => connection.invoke('send', 'Hello'));

这个服务器运行良好,但如何在Python脚本中连接它? 这里有一个库: https://pypi.python.org/pypi/signalr-client/0.0.6 但是无法正常工作。出现了错误:
signalr/negotiate 404 (not found)

Python 代码:
from requests import Session
from signalr import Connection

with Session() as session:
    #create a connection
    connection = Connection("wss://wg2.azurewebsites.net", session)

    #get chat hub
    chat = connection.register_hub("deviceshub")

    #start a connection
    connection.start()

你能提供一个带有 ASP .NET Core 2.0 的 Python 客户端的工作示例吗?


这可能会回答你的问题--https://stackoverflow.com/questions/48802936/signalr-python-client - maurcz
3
这里没有答案 - Norbert Pisz
你的域名是否安全?因为你正在使用wss而不是ws。 - Niels
是的,我尝试了SSL和非SSL两种方式来保证安全性。 - Norbert Pisz
4个回答

8

你正在使用的Python库似乎是针对以前版本的SignalR。SignalR for Asp.NET Core与以前版本的SignalR不兼容,因此旧客户端将无法与新服务器(或反之亦然)一起工作。


0

由于您遇到了404错误。

signalr / negotiate 404(未找到)

在Python代码中,您正在连接到deviceshub

#获取聊天中心      chat = connection.register_hub(“deviceshub”)

难道您不应该连接到chathub吗?

chat = connection.register_hub(“chat”)

如果这没有帮助,请仔细检查从Python应用程序发送的请求。

如果signalr连接成功,则应看到类似于以下内容的URL

https://example.com/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&_=1522732715296

如果与 JavaScript 客户端中的主机名和完整 URL 部分相同,请再次检查。

希望这可以帮助!


0

0

我有一些建议,你可以看看:

选项1
停止使用SSL版本并检查是否正常工作。因为在你的Javascript函数中,你使用了ws://" + window.location.host + "/chat

wss:// to ws://

选项2
如果我访问您的域wg2.azurewebsites.nl,我会收到以下错误:

Failed to load https://wg2.azurewebsites.net/deviceshub: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wg2.azurewebsites.net' is therefore not allowed access. The response had HTTP status code 404.

这意味着您的服务器需要响应一个带有域名的Access-Control-Allow-Origin头。 选项3
在您的javascript中,您连接到/chat,现在您尝试连接到/deviceshub,可能不存在。所以改为chat

谢谢,但我认为Python客户端存在问题。因此,我需要适用于新版本SignalR.Core的Python客户端。 - Norbert Pisz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接