我正在使用Aurelia Framework
,Typescript
并且event aggregator
我能够发布和订阅频道.
问题是我无法取消订阅频道.
注意:所有形式的subscribe方法都返回一个dispose函数.您可以调用此函数来处理订阅并停止接收消息.如果由路由器管理,则处置视图模型的停用回调的好地方,或者如果它是任何其他视图模型,则在其分离的回调中.
这取自aurelia官方文档网站,我似乎并不了解如何实现这一点.
我进入了aurelia gitter频道,我找到了3个关于此的讨论,其中一个给出了以下取消订阅的示例:
sub = ea.subscribe();
//unsubscribe the event
sub();
Run Code Online (Sandbox Code Playgroud)
问题是此代码在TypeScript中不起作用.
如何取消订阅event aggregator
打字稿?
现在,使用此代码
@inject(Publisher, Subscriber)
export class Home {
publisher: Publisher;
subscriber: Subscriber;
channelName = "testChannel";
constructor(pub: Publisher, sub: Subscriber) {
this.publisher = pub;
this.subscriber = sub;
this.subscriber.subscribe(this.channelName);
this.publisher.publish(this.channelName, "Ana are mere");
}
}
@inject(EventAggregator)
export class Publisher {
eventAggregator: EventAggregator = null;
constructor(agg: EventAggregator) {
this.eventAggregator = agg;
}
publish(channelName: string, …
Run Code Online (Sandbox Code Playgroud) 我signalr
用来实现聊天应用程序.
但是,我收到以下错误:
`类型'Microsoft.AspNet.SignalR.Client.HttpClientException'的例外
发生在mscorlib.dll但未在用户代码中处理
其他信息:StatusCode:500,ReasonPhrase:'Internal Server Error',版本:1.1,内容:System.Net.Http.StreamContent,Headers:
{
日期:2015年8月21日星期五07:22:52 GMT
服务器:Microsoft-HTTPAPI/2.0
内容长度:0
}
我不知道为什么.我使用的是signalR 2.2.0版.这是我的Hub
class ChatHub : Hub
{
public void Send(string message)
{
Clients.All.addMessage(message);
}
public override Task OnConnected()
{
Console.WriteLine("Client connected: " + Context.ConnectionId);
return base.OnConnected();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 Startup class
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务器程序
class Program
{
const string url = "http://localhost:8080";
static void Main(string[] args)
{
WebApp.Start(url);
Console.WriteLine("Started server at " + url);
Console.ReadLine(); …
Run Code Online (Sandbox Code Playgroud) 我有一个WebAPI
解决方案,我使用token authentication
,所以流程如下:
username
和登录password
AJAX
请求的标题中).现在SignalR
发挥作用.由于它使用WebSockets
,您无法传递标题.在寻找解决方案时,我遇到了以下情况:
SignalR
- 不是一个选项,因为它强制SignalR
使用longPolling
.$.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + token };
将token
用于验证WebAPI
调用的相同内容传递为query string
/或将其存储在cookie中SignalR
,然后创建一个以某种方式展开并将令牌扩展为标识的提供程序.我关注这篇博文,但我似乎错过了一些东西.
再次通过该标记作为query string
/或作为cookie,但是这一次创建自定义Authorize Attribute
到Authorize
SignalR
集线器或方法.
关于这一点的博客文章.此解决方案的问题Unprotect
在于令牌上的方法.
最后和最简单的解决方案是还支持cookie authentication
,继续使用bearer token authentication
的WebAPI
电话,让OWIN Middleware
轮毂上的授权调用.(这个解决方案实际上有效).
现在,问题是使用WebAPI
应用程序的默认模板Individual User Accounts …
我正在使用Aurelia和Typescript,我正在尝试实现以下功能:调用一个基类Parent
,在调用的类中扩展此类Child
,然后Child
在另一个类中注入一个实例.这是设置:
//file1
export class Parent {
constructor() {
debugger;
}
}
//file2
import {Parent} from "file1";
export class Child extends Parent {
constructor() {
super();
debugger;
}
}
//file3
import {inject} from "aurelia-framework";
import {Child} from "file2";
@inject(Child)
export class Home {
private child: Child;
constructor(_child: Child) {
this.child = _child;
debugger;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做并实例化时Home
,我收到以下错误:
Uncaught SyntaxError: Unexpected token <
Run Code Online (Sandbox Code Playgroud)
随着 ERROR [app-router] Router navigation failed, and no previous location could be …
我有一个SignalR
具有多个集线器的应用程序(集线器是同一解决方案中不同项目的一部分).
在前端,我想根据用户当前正在查看的组件启动连接.
假设我有2个集线器和2个组件:TestHub1
,TestHub2
; Component1
,Component2
.
在每个组件中,我实例化连接如下:
var testHub = $.connection.testHub;
//define client methods
$.connection.hub.logging = true;
$.connection.hub.start();
});
Run Code Online (Sandbox Code Playgroud)
所以我在多个组件中这样做.现在,假设我有两个组件连接TestHub1
,并TestHub2
分别(在同一时间),我怎么只能停止一个连接?如果在我调用的任何组件中$.connection.hub.stop()
,则两个集线器连接都已停止.
如何单独启动和停止集线器连接?(因为如果在我停止它们之后的某一点并且我打电话$.connection.hub.start()
,即使我从使用的组件中调用它TestHub1
, TestHub2
也将启动连接.
所以我正在寻找一种方法来启动和停止单个集线器连接,而不是整个$.connection.start()
和$.connection.hub.stop()
.
谢谢!
signalr ×3
asp.net ×2
aurelia ×2
typescript ×2
c# ×1
cookies ×1
javascript ×1
jquery ×1
winforms ×1