如何从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) 我可以看到HubConnection中有一个选项可以通过客户端的url请求传递参数.有没有办法通过JS或.NET客户端的http头传递特定的令牌?
我正在尝试在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
,看看是否会有所帮助.
不知道还有什么可以尝试或检查,任何帮助或指向正确的方向?
我有一些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上的例子,似乎都忽略了依赖关系的发布.
谢谢!
我有一个使用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 asp.net-mvc-4 signalr single-page-application durandal
我正在尝试使用以下内容获取集线器的上下文:
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工作,但所有其他需要服务器的东西,显然不会.
有任何想法吗?
我想将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生成能力将是非常好的.
我错了吗?还有另外一种方法吗?
我需要在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) 我想从java客户端连接到SignalR服务器.那可能吗?
有没有人写过一个java-client连接到SignalR?
我正在浏览开源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) signalr ×10
signalr-hub ×3
.net ×2
asp.net-mvc ×2
c# ×2
asp.net ×1
asp.net-core ×1
durandal ×1
foreach ×1
iis ×1
java ×1
javascript ×1
optimization ×1
swift ×1