SignalR .NET客户端:后续方法调用打开相同的连接

时间:2014-06-08 17:53:24

标签: signalr signalr-hub signalr.client

我有一个.NET客户端应用程序,连接到一个托管有.net mvc5 webapp的SignalR Hub。客户端应用程序的主要例程:

int num1 = _myService.GetSomeHubMethod();
int num2 = _myService.GetSomeOtherHubMethod();
...

其中_myService是类的实例:

public class MyService
{
    ...
    private HubConnection connection;
    private IHubProxy hubProxy;
    ...

    public MyService()
    {
         ...
         if (BASE_SITE_URL == null)
            BASE_SITE_URL = ConfigurationManager.AppSettings["BASE_SITE_URL"].ToString();
        if (connection == null)
            connection = new HubConnection(BASE_SITE_URL);
        if (hubProxy == null)
            hubProxy = connection.CreateHubProxy("MyHub");

        connection.Start().Wait();
    }

    ...

    public int GetSomeHubMethod()
    {
        //connection.Start().Wait();

        var t = hubProxy.Invoke<int>("SomeHubMethod");

        int result = t.Result;

        //connection.Stop();

        return result;
    }

    public int GetSomeOtherHubMethod()
    {
        //connection.Start().Wait();

        var t = hubProxy.Invoke<int>("SomeOtherHubMethod");

        int result = t.Result;

        //connection.Stop();

        return result;
    }

}

和SignalR集线器(服务器端)中的两个集线器方法是:

public class MyHub : Hub
{
    ...
    public int SomeHubMethod()
    { return 1; }

    public int SomeOtherHubMethod()
    { return 2; }        

}

问题是:第一个呼叫被正确评估,但第二个呼叫“挂起”了     int result = t.Result; 线。特别是,t.Status是“WaitingForActivation”。

如果我在主程序中切换两个调用的顺序,则执行第一个调用,并且秒“挂起”。

注意:如果我在两个方法内部启动和停止连接(参见注释行)而不是在MyService的构造函数中调用connection.Start()。Wait(),它工作正常,但它需要太多时间停下来开始。

感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

好吧,这似乎是一个僵局。我不得不这样修改方法:

public async Task<int> SomeHubMethod()
{
    return await Task.FromResult<int>(1);
}

...

public async Task<int> GetSomeHubMethod()
{
    return await chatHubProxy.Invoke<int>("SomeHubMethod");
}

...

int num1 = await _myService.GetSomeHubMethod();

好的,我承认我仍然需要做很多与异步相关的工作......