小编rad*_*tei的帖子

Aurelia取消订阅Event Aggregator

我正在使用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)

typescript aurelia aurelia-event-aggregator

16
推荐指数
1
解决办法
4065
查看次数

无法在winform客户端中启动连接

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)

c# winforms signalr

8
推荐指数
1
解决办法
1059
查看次数

WebAPI和SignalR Web应用程序 - 身份验证和授权

我有一个WebAPI解决方案,我使用token authentication,所以流程如下:

  • 用户尝试使用username和登录password
  • 如果凭证是正确的,他将获得一个令牌,以便在以下请求中使用(放在AJAX请求的标题中).

现在SignalR发挥作用.由于它使用WebSockets,您无法传递标题.在寻找解决方案时,我遇到了以下情况:

  1. 实际上传递一个标题 SignalR- 不是一个选项,因为它强制SignalR使用longPolling.

$.signalR.ajaxDefaults.headers = { Authorization: "Bearer " + token };

  1. token用于验证WebAPI调用的相同内容传递为query string/或将其存储在cookie中SignalR,然后创建一个以某种方式展开并将令牌扩展为标识的提供程序.我关注这篇博文,但我似乎错过了一些东西.

  2. 再次通过该标记作为query string/或作为cookie,但是这一次创建自定义Authorize AttributeAuthorize SignalR集线器或方法. 关于这一点的博客文章.此解决方案的问题Unprotect在于令牌上的方法.

  3. 最后和最简单的解决方案是还支持cookie authentication,继续使用bearer token authenticationWebAPI电话,让OWIN Middleware轮毂上的授权调用.(这个解决方案实际上有效).

现在,问题是使用WebAPI应用程序的默认模板Individual User Accounts …

asp.net authentication cookies signalr asp.net-web-api

8
推荐指数
1
解决办法
1854
查看次数

Aurelia&Typescript注入和继承

我正在使用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 …

dependency-injection typescript aurelia

6
推荐指数
1
解决办法
1285
查看次数

SignalR - 多个集线器 - 单独启动连接

我有一个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().

谢谢!

javascript asp.net jquery signalr

5
推荐指数
1
解决办法
4089
查看次数