第一次张贴。这是我使用.NET开发微服务的第一次经验。客户端将使用REST API来请求服务,API将使用微服务来获取结果并将其发送回客户端。 REST API将使用SignalR通过回调返回数据。预期有两种客户端应用程序,一种将在.NET中开发,另一种将在PYTHON中开发以使用该服务。我可以使用.NET客户端(使用Microsoft.AspNet.SignalR.Client)进行成功的测试,但是,当我尝试使用PYTHON客户端(使用Signalr-client)时,无法触发API的回调特定客户(如果我将响应发送给所有有效的客户)。我相信是因为在.NET客户端应用程序中,连接到HUB之后,我可以使用HubConnection.ConnectionId获得ConnectionId。然后,当我进行REST API调用时,我传递相同的ConnectionId,并且API使用ConnectionId通过SignalR发送响应。但是在PYTHON客户端中,我在Connection对象中找不到ConnectionId属性。有人知道我如何在PYTHON客户端中获取ConnectionId(或者我需要遵循其他方法)吗?
这是有效的.NET客户端
HttpClient client = new HttpClient();
HubConnection hubConnection = new HubConnection("http://localhost:12247");
var hubProxy = hubConnection.CreateHubProxy("MyTestHub");
Action<string> onUpdate = str => System.Console.WriteLine($"received: {str}");
hubConnection.Start()
.ContinueWith(t =>
{
hubProxy.On("OnUpdateCallback", onUpdate);
}).Wait();
var guid = Guid.Parse(hubConnection.ConnectionId);
var response = client.PostAsJsonAsync("http://localhost:12247/api/Values", guid).Result;
System.Console.ReadLine();
这是PYTHON客户端,但是如何找到ConnectionId
with Session() as session:
connection = Connection("http://localhost:12247/signalr", session)
hub = connection.register_hub('MyTestHub')
connection.start()
def onUpdate(data):
print('received: ' + str(data))
hub.client.on('OnUpdateCallback', onUpdate)
with connection:
response = requests.post("http://localhost:12247/api/Values", json=???) #how to find connectionid
sys.stdin.readline()