标签: signalr

从Controller调用SignalR Core Hub方法

如何从Controller调用SignalR Core Hub方法?
我使用ASP.NET Core 2.0与Microsoft.AspNetCore.SignalR(1.0.0-alpha2-final).

我有与Excel,SolidEdge通信的Windows服务...当操作完成后,它会在ASP.NET核心应用程序中向我的控制器发送请求.现在我需要通过SignalR通知连接到服务器的所有客户端,外部程序完成了一些任务.
我无法改变窗口服务的工作方式.(无法从窗口服务连接到SignalR).
我为旧的SignalR(GlobalHost.ConnectionManager.GetHubContext)找到了很多解决方案,但是已经发生了很大变化,而且这些解决方案不再适用了.

我的控制器:

[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        //call method TaskCompleted in Hub !!!! How?

        return new JsonResult(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的中心:

public class VarDesignHub : Hub
{
    public async Task TaskCompleted(int id)
    {
        await Clients.All.InvokeAsync("Completed", id);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# signalr asp.net-core-2.0 asp.net-core-signalr

39
推荐指数
4
解决办法
3万
查看次数

通过http Headers SignalR传递令牌

我可以看到HubConnection中有一个选项可以通过客户端的url请求传递参数.有没有办法通过JS或.NET客户端的http头传递特定的令牌?

signalr signalr-hub signalr.client

37
推荐指数
3
解决办法
3万
查看次数

未找到SignalR/signalr/hubs 404

我正在尝试在IIS上部署SignalR站点.代码一切正常VS. 但到目前为止,我尝试解决信号器/集线器的404找不到错误.

1)更改脚本参考:

script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

2)修改Web.Config包括:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

3)更改IIS上的调用请求UrlMappingsModule.

4)添加SignalR.Hosting.AspNet.dll,看看是否会有所帮助.

不知道还有什么可以尝试或检查,任何帮助或指向正确的方向?

asp.net iis signalr

36
推荐指数
5
解决办法
4万
查看次数

适用于SignalR和Castle Windsor的Hub依赖生命周期管理

我有一些SignalR集线器可能需要访问一些瞬态和单独的依赖项.挂起Hub的创建很容易并且工作正常但是SignalR在创建的Hub上执行自己的Dispose()调用,而不是通知依赖解析器并让它参与处理.

如果依赖项是注册单例,这不是什么大问题,但如果它们被注册为瞬态,那么它们将永远不会被处置(如果需要的话)并且Windsor将保持它们存活直到收集Windsor容器(当无论如何,Web服务器正在关闭).

我看到几种可能的处理方法......

a)这里有人指出了一种方法来将SignalR的HubDispatcher类子类化,以便它可以进行适当的处​​理.它不是SignalR的标准DependencyResolver的一部分,所以这可能很难/不可能

b)管道中其他地方的SignalR中的其他一些类可以被覆盖或轻松替换,以便我们可以继承HubDispatcher并确保使用子类.据我所知,这将是Owin中间件类HubDispatcherMiddleware.有没有办法迫使Owin不注册这个类,而是注册我自己的版本(这又使用我自己的HubDispatcher)?

c)有一种方法可以拦截SignalR在我的Hub类上进行的Dispose()调用,这样就可以调用Windsor来确保任何依赖关系被正确处理并从容器中释放

d)谨慎地避免使用瞬态生活方式依赖项,而是传入类型化工厂,以便我们可以通过Hub中的类型化工厂解决和释放每个依赖项

目前(d)是我知道该怎么做的唯一一个.(a)或(b)会很棒.(c)主要由本文http://kozmic.net/2010/01/27/transparently-releasing-components-in-windsor/涵盖,但是,拦截器要求通过IDisposable调用Dispose().SignalR的HubDispather类实现了集线器处理

private static void DisposeHubs(IEnumerable<IHub> hubs)
{
    foreach (var hub in hubs)
    {
        hub.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

没有转换到IDisposable那里...... Hub类上的Dispose()是虚拟的,而且博客帖子暗示虚拟Dispose()可能会增加一些复杂性(我不太确定多少,我不太了解无论如何,Castle的拦截器以及是否可以使用IDisposable进行处理.

我很欣赏我已经为一个相当狭隘的观众写了这个问题 - 那些使用过Windsor和SignalR而不仅仅是解决依赖关系的人.我发现的每个例子,包括StackOverflow上的例子,似乎都忽略了依赖关系的发布.

谢谢!

castle-windsor inversion-of-control signalr signalr-hub

36
推荐指数
1
解决办法
2952
查看次数

SignalR的这些民意调查请求来自哪里?

我有一个使用Durandal的SPA应用程序.

我的程序定期开始有一个http请求:

http://localhost:1551/f9750d8f8aa54265835e72d56d23144a/arterySignalR/poll?transport=longPolling&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAACM1YyjLngEiQsL54ET%2B%2FqwAAAAACAAAAAAADZgAAwAAAABAAAAAyZZfHz09psv64kIgPPwQNAAAAAASAAACgAAAAEAAAABMZImCidzdmb21ehxuGD4IoAAAAbazfW7CYR7y7HKb8JPt9ZH9b6fUDlZao60kBG662Vy%2Fb0IHwkwidthQAAAA1qSqnsCOheiNyXiINEyBPBAkqVg%3D%3D&messageId=d-79160814-B%2C0%7CC%2C4%7CD%2C0&requestUrl=http%3A%2F%2Flocalhost%3A2690%2F&browserName=Firefox&tid=5&_=1391326350868
Run Code Online (Sandbox Code Playgroud)

我不知道它来自哪里?我记得我没有添加任何SignalR或类似的东西.

如何检查我的代码的哪一部分正在生成此请求?然后删除它.

我正在使用的技术是:

  • 迪朗达尔
  • ASP.NET MVC 4.0
  • 昏死
  • ASP.NET WebApi

asp.net-mvc asp.net-mvc-4 signalr single-page-application durandal

34
推荐指数
1
解决办法
2万
查看次数

如何在ASP.NET核心中获取SignalR Hub上下文?

我正在尝试使用以下内容获取集线器的上下文:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<SomeHub>();
Run Code Online (Sandbox Code Playgroud)

问题是没有定义GlobalHost.我看到它是SignalR.Core dll的一部分.目前,我在项目.json文件中,在依赖项下有以下内容:

"Microsoft.AspNet.SignalR.Server": "3.0.0-*"
Run Code Online (Sandbox Code Playgroud)

如果我添加最新的Core版本:

"Microsoft.AspNet.SignalR.Server": "3.0.0-*",
"Microsoft.AspNet.SignalR.Core" :  "2.1.2"
Run Code Online (Sandbox Code Playgroud)

我得到了一大堆错误,因为服务器和核心是冲突的.如果我将它们更改为使用版本"3.0.0-*",则所有冲突都会消失,但无法找到GlobalHost.如果我删除服务器,只删除用户核心版本2.1.2然后GlobalHost工作,但所有其他需要服务器的东西,显然不会.

有任何想法吗?

signalr signalr-hub asp.net-core

34
推荐指数
3
解决办法
2万
查看次数

将MVC PartialView渲染为SignalR响应

我想将PartialView呈现为HTML字符串,以便将其返回到SignalR ajax请求.

就像是:

SignalR Hub(mySignalHub.cs)

public class mySignalRHub: Hub
{
    public string getTableHTML()
    {
        return PartialView("_MyTablePartialView", GetDataItems()) // *How is it possible to do this*
    }
}
Run Code Online (Sandbox Code Playgroud)

Razor PartialView(_MyTablePartialView.cshtml)

@model IEnumerable<DataItem>

<table>
    <tbody>
        @foreach (var dataItem in Model)
        {
        <tr>
            <td>@dataItem.Value1</td>
            <td>@dataItem.Value2</td>
        </tr>
        }
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

HTML(MySignalRWebPage.html)

<Script>
    ...      
    //Get HTML from SignalR function call
    var tableHtml = $.connection.mySignalRHub.getTableHTML();

    //Inject into div
    $('#tableContainer).html(tableHtml);
</Script>

<div id="tableContainer"></div>
Run Code Online (Sandbox Code Playgroud)

我的问题是我似乎无法在Controller之外渲染PartialView.甚至可以在Controller外部渲染PartialView吗?能够利用Razor附带的令人敬畏的HTML生成能力将是非常好的.

我错了吗?还有另外一种方法吗?

c# asp.net-mvc partial-views asp.net-mvc-3 signalr

33
推荐指数
2
解决办法
8397
查看次数

我可以在Swift代码中运行JavaScript吗?

我需要在Swift代码中包含JavaScript代码才能调用signalR聊天,这可能吗?如果没有,我可以转换它吗?

sendmessage 是一个按钮.

$(function () {
    // Declare a proxy to reference the hub.
    var chat = $.connection.chatHub;
    // Create a function that the hub can call to broadcast messages.
    chat.client.broadcastMessage = function (name, message) {
        // some code
    };

    // Start the connection.
    $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
            // Call the Send method on the hub.
            chat.server.send('name', 'message');
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

signalr代码是:

    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update …
Run Code Online (Sandbox Code Playgroud)

javascript signalr swift

33
推荐指数
2
解决办法
2万
查看次数

Java客户端连接到SignalR?

我想从java客户端连接到SignalR服务器.那可能吗?

有没有人写过一个java-client连接到SignalR?

.net java signalr

32
推荐指数
2
解决办法
8720
查看次数

"不要在这个热代码路径中使用StringBuilder或foreach"

我正在浏览开源SignalR项目的源代码,我看到这个名为"不要在这个热代码路径中使用StringBuilder或foreach"的差异代码:

-           public static string MakeCursor(IEnumerable<Cursor> cursors)
+           public static string MakeCursor(IList<Cursor> cursors)
            { 
-               var sb = new StringBuilder();
-               bool first = true;
-               foreach (var c in cursors)
+               var result = "";
+               for (int i = 0; i < cursors.Count; i++)
                {
-                   if (!first)
+                   if (i > 0)
                    {
-                       sb.Append('|');
+                       result += '|';
                    }
-                   sb.Append(Escape(c.Key));
-                   sb.Append(',');
-                   sb.Append(c.Id);
-                   first = false; …
Run Code Online (Sandbox Code Playgroud)

.net optimization foreach stringbuilder signalr

32
推荐指数
1
解决办法
1902
查看次数