asp.net - 使用 Controller 中的 Hub 方法?

标签 asp.net asp.net-mvc signalr signalr-hub

我正在使用 SignalR 2,但我无法弄清楚如何使用我的 Hub 方法,例如从 Controller 操作内部。

我知道我可以做到以下几点:

var hub = GlobalHost.ConnectionManager.GetHubContext<T>();
hub.Clients.All.clientSideMethod(param);

但这会直接在客户端执行该方法。

如果我的服务器端有业务逻辑怎么办ClientSideMethod(param)我想从我的 Controller 调用的方法与从客户端调用它时的方法相同吗?

目前我使用public static void ClientSideMethod(param)在我的集线器内,在这种方法中,我使用 IHubContext来自 ConnectionManager .

这样做没有更好的办法吗?

以下不起作用(在 SignalR 2 中不再起作用?):
var hubManager = new DefaultHubManager(GlobalHost.DependencyResolver);
instance = hubManager.ResolveHub(typeof(T).Name) as T;
instance.ClientSideMethod(param);

访问客户端时,出现“不支持通过 Hub 管道创建的 Hub”异常。

最佳答案

它可能会创建一个“帮助器”类来实现您的业务规则并由您的集线器和 Controller 调用:

public class MyHub : Hub
{
    public void DoSomething()
    {
        var helper = new HubHelper(this);
        helper.DoStuff("hub stuff");
    }
}

public class MyController : Controller
{
    public ActionResult Something()
    {
        var hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        var helper = new HubHelper(hub);
        helper.DoStuff("controller stuff");
    }
}

public class HubHelper
{
    private IHubConnectionContext hub;

    public HubHelper(IHubConnectionContext hub)
    {
        this.hub = hub;
    }

    public DoStuff(string param)
    {
        //business rules ...

        hub.Clients.All.clientSideMethod(param);
    }
}

关于asp.net - 使用 Controller 中的 Hub 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17896739/

相关文章:

asp.net - 将 [requireSSL ="true"] 放入我的 web.config 返回垃圾页面

asp.net - xml 响应 http post - 将 request.inputstream 转换为字符串 - asp.net

asp.net-mvc - Entity Framework 7 和 ASP MVC 5 - 简单任务

asp.net-mvc - [HandleError] 相对于 Application_Error 的优势

c# - ASP.NET - ChildActionOnly 和 NonAction 属性之间有什么区别?

asp.net-mvc-3 - SignalR 在启动时不发送网络请求

javascript - 如何从后面的 asp.net 代码调用 javascript 函数

c# - 获取gridview中勾选项的值

Azure 由内而外的连接

c# - Signalr 不发送给特定用户