我使用的是signalR 2.1.2版。我正在使用控制台应用程序作为SignalrClient。我调用了一个方法-A,在得到响应之后,我必须根据方法-A的响应来调用方法-B。在这种情况下,我能够成功调用并且没有从方法B获得任何响应。我的错是什么?这是我的代码
var hubConnection = new HubConnection("Url");
IHubProxy proxy = hubConnection.CreateHubProxy("HitProxy");
proxy.On<bool>("Client-method-B", (retvAl) =>
{
Console.WriteLine("Method-B response");
});
proxy.On<bool>("Client-method-A", (isConnected) =>
{
Console.WriteLine("Method-A response");
if(isConnected)
{
proxy.Invoke("method-B", "someValue").Wait();
}
});
hubConnection.Start().Wait();
proxy.Invoke("method-A", "123").Wait();
在这里,我没有得到&#39;方法-B&#39;的任何回复。感谢。
答案 0 :(得分:3)
从SignalR服务器方法获取结果的最佳方法是读取其返回值,而不是在调用方调用客户端方法。例如,您可以按如下方式读取方法-A的响应:
proxy.Invoke("method-A", "123").ContinueWith((t) =>
{
bool isConnected = t.Result;
});
期待方法-A的签名类似于:
public bool method-A(string p);
这样,您不必仅调用客户端方法将服务器方法的结果返回给调用者。您可以从另一个服务器方法调用的回调中调用另一个服务器方法,如下所示:
proxy.Invoke("method-A", "123").ContinueWith((t) =>
{
bool isConnected = t.Result;
if(isConnected)
{
proxy.Invoke("method-B", "someValue").ContinueWith((u) =>
{
Console.WriteLine("Method-B response: " + u.Result);
});
}
});
假设方法-B在服务器端返回一个字符串值。
答案 1 :(得分:2)
在提供的代码中,您可以创建代理
IHubProxy proxy = hubConnection.CreateHubProxy("HitProxy");
但稍后你使用
hubProxy.Invoke("method-B", "someValue").Wait();
所以它只是一个类型和代理== hubProxy?
我建议你做3件事