ASP .NET Core 2.0,SignalR

Nor*_*isz 7 python signalr asp.net-core

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

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

我也有Javascript客户端:

<script src="scripts/signalr-client.min.js"></script>
connection.on('send', data => {
    console.log(data);
});

connection.start()
          .then(() => connection.invoke('send', 'Hello'));
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如何在Python脚本中连接此服务器?有图书馆:https: //pypi.python.org/pypi/signalr-client/0.0.6

但是不起作用.我有一个错误:

signalr/negotiate 404 (not found)
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

你能提供ASP .NET Core 2.0的工作样本(Python客户端)吗?

Paw*_*wel 7

您正在使用的python库似乎是针对SignalR的早期版本.SignalR for Asp.NET Core与之前版本的SignalR不兼容,因此旧客户端无法与新服务器一起使用(反之亦然).


Nie*_*els 0

我有一些建议你可以检查一下:

选项 1
停止使用 SSL 版本并检查其是否有效。因为在你的 Javascript 函数中你使用ws://" + window.location.host + "/chat

wss:// to ws://
Run Code Online (Sandbox Code Playgroud)

选项 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.
Run Code Online (Sandbox Code Playgroud)

这意味着您的服务器需要响应Access-Control-Allow-Origin带有域名的标头。

选项 3
在您的 javascript 中,您连接到/chat现在您尝试连接的位置,/deviceshub也许它不存在。所以改成chat